summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2019-07-22 18:52:42 +0000
committerPetr Hosek <phosek@chromium.org>2019-07-22 18:52:42 +0000
commitf6cd6ffbc9f8bfa0bbe25dba6a9737607a684bab (patch)
tree1dba4a914b3bbcb71e7b91a1c000cd5cb84b1d97 /llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
parentef5cfc2dae0725226254561b42134308720e57ab (diff)
downloadbcm5719-llvm-f6cd6ffbc9f8bfa0bbe25dba6a9737607a684bab.tar.gz
bcm5719-llvm-f6cd6ffbc9f8bfa0bbe25dba6a9737607a684bab.zip
[SafeStack] Insert the deref after the offset
While debugging code that uses SafeStack, we've noticed that LLVM produces an invalid DWARF. Concretely, in the following example: int main(int argc, char* argv[]) { std::string value = ""; printf("%s\n", value.c_str()); return 0; } DWARF would describe the value variable as being located at: DW_OP_breg14 R14+0, DW_OP_deref, DW_OP_constu 0x20, DW_OP_minus The assembly to get this variable is: leaq -32(%r14), %rbx The order of operations in the DWARF symbols is incorrect in this case. Specifically, the deref is incorrect; this appears to be incorrectly re-inserted in repalceOneDbgValueForAlloca. With this change which inserts the deref after the offset instead of before it, LLVM produces correct DWARF: DW_OP_breg14 R14-32 Differential Revision: https://reviews.llvm.org/D64971 llvm-svn: 366726
Diffstat (limited to 'llvm/test/Transforms/SafeStack/X86/debug-loc2.ll')
-rw-r--r--llvm/test/Transforms/SafeStack/X86/debug-loc2.ll4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/test/Transforms/SafeStack/X86/debug-loc2.ll b/llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
index afa143f9c08..30623962691 100644
--- a/llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
+++ b/llvm/test/Transforms/SafeStack/X86/debug-loc2.ll
@@ -25,7 +25,7 @@ entry:
tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !24), !dbg !16
; Supported dbg.value: rewritted based on the [[USP]] value.
-; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_deref, DW_OP_constu, 4, DW_OP_minus))
+; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref))
tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !15), !dbg !16
call void @capture(i32* nonnull %x1), !dbg !17
@@ -33,7 +33,7 @@ entry:
; CHECK: call void @llvm.random.metadata.use(metadata ![[EMPTY]])
call void @llvm.random.metadata.use(metadata i32* %x2)
-; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X2:.*]], metadata !DIExpression(DW_OP_deref, DW_OP_constu, 8, DW_OP_minus))
+; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X2:.*]], metadata !DIExpression(DW_OP_constu, 8, DW_OP_minus, DW_OP_deref))
call void @llvm.dbg.value(metadata i32* %x2, metadata !12, metadata !15), !dbg !18
call void @capture(i32* nonnull %x2), !dbg !19
ret void, !dbg !20
OpenPOWER on IntegriCloud