Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: CVS commit: src/sys/arch



thanks for doing this.  it will make sanitizer_linux.cc's
port for GetPcSpBp() *much* simplier.

> Module Name:	src
> Committed By:	kamil
> Date:		Thu Feb 15 15:53:57 UTC 2018
> 
> Modified Files:
> 	src/sys/arch/sparc/include: mcontext.h

this doesn't seem right.  at least, it does not match
the usage from libsanitizer:

  uptr *stk_ptr;
#  if defined (__arch64__)
  stk_ptr = (uptr *) (*sp + 2047);
#  else
  stk_ptr = (uptr *) *sp;
#  endif
  *bp = stk_ptr[15];

i don't understand either ofthe sparc versions you have.

+ #define       _UC_MACHINE_FP(uc)      (((uc)->uc_mcontext.__gregs[_REG_O6])+0x80e)
+ #define       _UC_MACHINE_FP(uc)      (((uc)->uc_mcontext.__gregs[_REG_O6])+0xf)

both of these grab something invalid and will likely
cause a run-time unaligned access fault as the result
will be aligned to 0x3.  there's an extra deref here
in the sparc case that is needed.  oh, i see where the
additional 0xf offset comes from.  you've conflated
byte and word sizes here.  the 64 bit stack pointer
is offset by -2047 from its actual value.  that's a
byte address.  the 15 is an array offset, which is
either 4 or 8 bytes.

the rest of them seem right as well as i could tell,
given ia64 is kind of a wreck..


.mrg.


Home | Main Index | Thread Index | Old Index