Message ID | CAGQ9bdydPvMQL5YKE7VivE7U+25myp4wjmOrc6bDMANtpOSW1Q@mail.gmail.com |
---|---|
State | New |
Headers | show |
From: Konstantin Serebryany <konstantin.s.serebryany@gmail.com> Date: Mon, 3 Dec 2012 22:33:12 +0400 > On Mon, Dec 3, 2012 at 10:29 PM, David Miller <davem@davemloft.net> wrote: >> We could also add a __sparc__ block to sanitizer_stacktrace.cc:patch_pc(). >> The Sparc PC is actually 8 bytes after the caller's jump. Sparc has >> a delay slot, the place to return to is 2 instructions after the call/jump, >> and instructions are all 4 bytes long. > > Like this? > > --- sanitizer_common/sanitizer_stacktrace.cc (revision 169136) > +++ sanitizer_common/sanitizer_stacktrace.cc (working copy) > @@ -36,6 +36,8 @@ > #if defined(__powerpc__) || defined(__powerpc64__) > // PCs are always 4 byte aligned. > return pc - 4; > +#elif defined(__sparc__) > + return pc - 8; > #else > return pc - 1; > #endif > Perfect.
On Mon, Dec 3, 2012 at 10:37 PM, David Miller <davem@davemloft.net> wrote: > From: Konstantin Serebryany <konstantin.s.serebryany@gmail.com> > Date: Mon, 3 Dec 2012 22:33:12 +0400 > >> On Mon, Dec 3, 2012 at 10:29 PM, David Miller <davem@davemloft.net> wrote: >>> We could also add a __sparc__ block to sanitizer_stacktrace.cc:patch_pc(). >>> The Sparc PC is actually 8 bytes after the caller's jump. Sparc has >>> a delay slot, the place to return to is 2 instructions after the call/jump, >>> and instructions are all 4 bytes long. >> >> Like this? >> >> --- sanitizer_common/sanitizer_stacktrace.cc (revision 169136) >> +++ sanitizer_common/sanitizer_stacktrace.cc (working copy) >> @@ -36,6 +36,8 @@ >> #if defined(__powerpc__) || defined(__powerpc64__) >> // PCs are always 4 byte aligned. >> return pc - 4; >> +#elif defined(__sparc__) >> + return pc - 8; >> #else >> return pc - 1; >> #endif >> > > Perfect. http://llvm.org/viewvc/llvm-project?view=rev&revision=169141 Will reach gcc with the next libsanitizer merge (or feel free to commit the same patch directly to gcc). --kcc
From: Konstantin Serebryany <konstantin.s.serebryany@gmail.com> Date: Mon, 3 Dec 2012 22:44:15 +0400 > On Mon, Dec 3, 2012 at 10:37 PM, David Miller <davem@davemloft.net> wrote: >> From: Konstantin Serebryany <konstantin.s.serebryany@gmail.com> >> Date: Mon, 3 Dec 2012 22:33:12 +0400 >> >>> On Mon, Dec 3, 2012 at 10:29 PM, David Miller <davem@davemloft.net> wrote: >>>> We could also add a __sparc__ block to sanitizer_stacktrace.cc:patch_pc(). >>>> The Sparc PC is actually 8 bytes after the caller's jump. Sparc has >>>> a delay slot, the place to return to is 2 instructions after the call/jump, >>>> and instructions are all 4 bytes long. >>> >>> Like this? >>> >>> --- sanitizer_common/sanitizer_stacktrace.cc (revision 169136) >>> +++ sanitizer_common/sanitizer_stacktrace.cc (working copy) >>> @@ -36,6 +36,8 @@ >>> #if defined(__powerpc__) || defined(__powerpc64__) >>> // PCs are always 4 byte aligned. >>> return pc - 4; >>> +#elif defined(__sparc__) >>> + return pc - 8; >>> #else >>> return pc - 1; >>> #endif >>> >> >> Perfect. > > http://llvm.org/viewvc/llvm-project?view=rev&revision=169141 > Will reach gcc with the next libsanitizer merge (or feel free to > commit the same patch directly to gcc). Thanks for taking care of this.
--- sanitizer_common/sanitizer_stacktrace.cc (revision 169136) +++ sanitizer_common/sanitizer_stacktrace.cc (working copy) @@ -36,6 +36,8 @@ #if defined(__powerpc__) || defined(__powerpc64__) // PCs are always 4 byte aligned. return pc - 4; +#elif defined(__sparc__) + return pc - 8; #else return pc - 1; #endif