diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2017-10-29 20:46:45 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-10-29 20:47:05 -0400 |
commit | cecd2f2d708d419878205ddd8b87bba18e6483d9 (patch) | |
tree | 72837286086fb64d3b458d14cb95c13425cca8ea /compiler/llvmGen/LlvmCodeGen/CodeGen.hs | |
parent | 3b784d440d4b01b4c549df7c9a3ed2058edfc780 (diff) | |
download | haskell-cecd2f2d708d419878205ddd8b87bba18e6483d9.tar.gz |
Add -falignment-sanitization flag
Here we add a flag to instruct the native code generator to add
alignment checks in all info table dereferences. This is helpful in
catching pointer tagging issues.
Thanks to @jrtc27 for uncovering the tagging issues on Sparc which
inspired this flag.
Test Plan: Validate
Reviewers: simonmar, austin, erikd
Reviewed By: simonmar
Subscribers: rwbarton, trofi, thomie, jrtc27
Differential Revision: https://phabricator.haskell.org/D4101
Diffstat (limited to 'compiler/llvmGen/LlvmCodeGen/CodeGen.hs')
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs index 584d90cad0..300ebb99c0 100644 --- a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs +++ b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs @@ -1139,6 +1139,8 @@ genMachOp _ op [x] = case op of all0s = LMLitVar $ LMVectorLit (replicate len all0) in negateVec vecty all0s LM_MO_FSub + MO_AlignmentCheck _ _ -> panic "-falignment-sanitisation is not supported by -fllvm" + -- Handle unsupported cases explicitly so we get a warning -- of missing case when new MachOps added MO_Add _ -> panicOp @@ -1388,6 +1390,8 @@ genMachOp_slow opt op [x, y] = case op of MO_VF_Neg {} -> panicOp + MO_AlignmentCheck {} -> panicOp + where binLlvmOp ty binOp = runExprData $ do vx <- exprToVarW x |