• Elliott Hughes's avatar
    Fix signal trampolines. · 7dc2b7b3
    Elliott Hughes authored
    * LP32 should use sa_restorer too. gdb expects this, and future (>= 3.15) x86
      kernels will apparently stop supporting the case where SA_RESTORER isn't
      set.
    
    * gdb and libunwind care about the exact instruction sequences, so we need to
      modify the code slightly in a few cases to match what they're looking for.
    
    * gdb also cares about the exact function names (for some architectures),
      so we need to use __restore and __restore_rt rather than __sigreturn and
      __rt_sigreturn.
    
    * It's possible that we don't have a VDSO; dl_iterate_phdr shouldn't assume
      that getauxval(AT_SYSINFO_EHDR) will return a non-null pointer.
    
    This fixes unwinding through a signal handler in gdb for all architectures.
    It doesn't fix libunwind for arm and arm64. I'll keep investigating that...
    
    (cherry picked from commit 36f451a6)
    
    Bug: 17436734
    Change-Id: Ic1ea1184db6655c5d96180dc07bcc09628e647cb
    7dc2b7b3
dl_iterate_phdr_static.cpp 3.25 KB