[compiler-rt] r243467 - PowerPC's ABIs differ from those of other architectures in that the

Bill Schmidt wschmidt at linux.vnet.ibm.com
Tue Jul 28 13:06:32 PDT 2015


On Tue, 2015-07-28 at 14:51 -0500, Hal Finkel wrote:
> ----- Original Message -----
> > From: "Bill Schmidt" <wschmidt at linux.vnet.ibm.com>
> > To: llvm-commits at cs.uiuc.edu
> > Sent: Tuesday, July 28, 2015 2:41:50 PM
> > Subject: [compiler-rt] r243467 - PowerPC's ABIs differ from those of other	architectures in that the
> > 
> > Author: wschmidt
> > Date: Tue Jul 28 14:41:49 2015
> > New Revision: 243467
> > 
> > URL: http://llvm.org/viewvc/llvm-project?rev=243467&view=rev
> > Log:
> > PowerPC's ABIs differ from those of other architectures in that the
> > callee-saved return address is stored in the caller's stack frame,
> > not
> > the callee's.  This patch adjusts the logic to find the LR in the
> > correct place for PowerPC.
> > 
> > Patch joint with Bill Seurer.
> > 
> > Modified:
> >     compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> >     compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h
> > 
> > Modified:
> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> > URL:
> > http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc?rev=243467&r1=243466&r2=243467&view=diff
> > ==============================================================================
> > --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> > (original)
> > +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> > Tue Jul 28 14:41:49 2015
> > @@ -83,7 +83,15 @@ void BufferedStackTrace::FastUnwindStack
> >    while (IsValidFrame((uptr)frame, stack_top, bottom) &&
> >           IsAligned((uptr)frame, sizeof(*frame)) &&
> >           size < max_depth) {
> > +#ifdef __powerpc__
> 
> Please add a comment explaining the rationale here as well.

Commentary added in r243470.

Thanks!
Bill

> 
> Thanks,
> Hal
> 
> > +    uhwptr *caller_frame = (uhwptr*)frame[0];
> > +    if (!IsValidFrame((uptr)caller_frame, stack_top, bottom) ||
> > +        !IsAligned((uptr)caller_frame, sizeof(uhwptr)))
> > +      break;
> > +    uhwptr pc1 = caller_frame[2];
> > +#else
> >      uhwptr pc1 = frame[1];
> > +#endif
> >      if (pc1 != pc) {
> >        trace_buffer[size++] = (uptr) pc1;
> >      }
> > 
> > Modified:
> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h
> > URL:
> > http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h?rev=243467&r1=243466&r2=243467&view=diff
> > ==============================================================================
> > --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h
> > (original)
> > +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h Tue
> > Jul 28 14:41:49 2015
> > @@ -19,8 +19,7 @@ namespace __sanitizer {
> >  
> >  static const u32 kStackTraceMax = 256;
> >  
> > -#if SANITIZER_LINUX && (defined(__aarch64__) || defined(__powerpc__)
> > || \
> > -                        defined(__powerpc64__) || defined(__sparc__)
> > || \
> > +#if SANITIZER_LINUX && (defined(__aarch64__) || defined(__sparc__)
> > || \
> >                          defined(__mips__))
> >  # define SANITIZER_CAN_FAST_UNWIND 0
> >  #elif SANITIZER_WINDOWS
> > 
> > 
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> > 
> 





More information about the llvm-commits mailing list