Changes from Git (git http://labmaster3.local/git/llvm-project.git)


  1. Temporarily run machine-verifier once in test/CodeGen/SPARC/fp128.ll, so (details)
  2. [asan] Remove debug locations from alloca prologue instrumentation (details)
Commit 7b63e27cc0a940a67db84b8b8485dd8b81a2beeb by paulsson
Temporarily run machine-verifier once in test/CodeGen/SPARC/fp128.ll, so
that it XFAIL:s also without expensive checks.
The file was modifiedllvm/test/CodeGen/SPARC/fp128.ll
Commit 09667bc1920463107684a566c3f2c3cef9b156e7 by aclopte
[asan] Remove debug locations from alloca prologue instrumentation
Summary: This fixes
"Wrong debugging information with -fsanitize=address" where asan
instrumentation causes the prologue end to be computed incorrectly:
findPrologueEndLoc, looks for the first instruction with a debug
location to determine the prologue end.  Since the asan instrumentation
instructions had debug locations, that prologue end was at some
instruction, where the stack frame is still being set up.
There seems to be no good reason for extra debug locations for the asan
instrumentations that set up the frame; they don't have a natural source
location.  In the debugger they are simply located at the start of the
For certain other instrumentations like
-fsanitize-coverage=trace-pc-guard the same problem persists - that
might be more work to fix, since it looks like they rely on locations of
the tracee functions.
This partly reverts aaf4bb239487e0a3b20a8eaf94fc641235ba2c29
"[asan] Set debug location in ASan function prologue" whose motivation
was to give debug location info to the coverage callback. Its test only
ensures that the call to @__sanitizer_cov_trace_pc_guard is given the
correct source location; as the debug location is still set in
ModuleSanitizerCoverage::InjectCoverageAtBlock, the test does not break.
So -fsanitize-coverage is hopefully unaffected - I don't think it should
rely on the debug locations of asan-generated allocas.
Related revision: 3c6c14d14b40adfb581940859ede1ac7d8ceae7a
"ASAN: Provide reliable debug info for local variables at -O0."
Below is how the X86 assembly version of the added test case changes. We
get rid of some .loc lines and put prologue_end where the user code
--- 2.master.s 2019-12-02 12:32:38.982959053 +0100
+++ 2.patch.s 2019-12-02 12:32:41.106246674 +0100
@@ -45,8 +45,6 @@
.cfi_offset %rbx, -24
xorl %eax, %eax
movl %eax, %ecx
- .Ltmp2:
- .loc 1 3 0 prologue_end      # 2.c:3:0
cmpl $0, __asan_option_detect_stack_use_after_return
movl %edi, 92(%rbx)          # 4-byte Spill
movq %rsi, 80(%rbx)          # 8-byte Spill
@@ -57,9 +55,7 @@
callq __asan_stack_malloc_0
movq %rax, 72(%rbx)          # 8-byte Spill
- .loc 1 0 0 is_stmt 0         # 2.c:0:0
movq 72(%rbx), %rax          # 8-byte Reload
- .loc 1 3 0                   # 2.c:3:0
cmpq $0, %rax
movq %rax, %rcx
movq %rax, 64(%rbx)          # 8-byte Spill
@@ -72,9 +68,7 @@
movq %rax, %rsp
movq %rax, 56(%rbx)          # 8-byte Spill
- .loc 1 0 0                   # 2.c:0:0
movq 56(%rbx), %rax          # 8-byte Reload
- .loc 1 3 0                   # 2.c:3:0
movq %rax, 120(%rbx)
movq %rax, %rcx
addq $32, %rcx
@@ -99,7 +93,6 @@
movb %r8b, 31(%rbx)          # 1-byte Spill
je .LBB1_7
# %bb.5:
- .loc 1 0 0                   # 2.c:0:0
movq 40(%rbx), %rax          # 8-byte Reload
andq $7, %rax
addq $3, %rax
@@ -118,7 +111,8 @@
movl %ecx, (%rax)
movq 80(%rbx), %rdx          # 8-byte Reload
movq %rdx, 128(%rbx)
- .loc 1 4 3 is_stmt 1         # 2.c:4:3
+ .loc 1 4 3 prologue_end      # 2.c:4:3
movq %rax, %rdi
callq f
movq 48(%rbx), %rax          # 8-byte Reload
Reviewers: eugenis, aprantl
Reviewed By: eugenis
Subscribers: ormris, aprantl, hiraditya, llvm-commits
Tags: #llvm
Differential Revision:
The file was modifiedllvm/test/Instrumentation/AddressSanitizer/local_stack_base.ll
The file was modifiedllvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
The file was addedllvm/test/Instrumentation/AddressSanitizer/debug-info-alloca.ll