diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index 6359f4348e3c48..2faba3353d13dc 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -725,6 +725,11 @@ static void GetArgsAndEnv(char ***argv, char ***envp) { # if !SANITIZER_GO if (&__libc_stack_end) { uptr *stack_end = (uptr *)__libc_stack_end; + // Linux/sparc64 needs an adjustment, cf. glibc + // sysdeps/sparc/sparc{32,64}/dl-machine.h (DL_STACK_END). +# if SANITIZER_LINUX && defined(__sparc__) + stack_end = &stack_end[16]; +# endif // Normally argc can be obtained from *stack_end, however, on ARM glibc's // _start clobbers it: // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/arm/start.S;hb=refs/heads/release/2.31/master#l75