x86_64 linker.

Based on I8dc3e2cb596f75dc58ae82e4dc58f8c177dd3323 by
Pavel Chupin <pavel.v.chupin@intel.com>.

Change-Id: Icd582d277cbe273477b450f2848343d72c86ec9f
This commit is contained in:
Elliott Hughes
2013-10-04 17:01:33 -07:00
parent 5d06718cd3
commit c00f2cb587
8 changed files with 361 additions and 70 deletions

View File

@@ -176,7 +176,12 @@ static bool have_siginfo(int signum) {
* Catches fatal signals so we can ask debuggerd to ptrace us before
* we crash.
*/
#if __LP64__ // TODO: implement 64-bit sigaction using rt_sigaction.
void debuggerd_signal_handler(int n) {
siginfo_t* info = NULL;
#else
void debuggerd_signal_handler(int n, siginfo_t* info, void*) {
#endif
/*
* It's possible somebody cleared the SA_SIGINFO flag, which would mean
* our "info" arg holds an undefined value.
@@ -249,7 +254,11 @@ void debuggerd_init() {
struct sigaction action;
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
#if __LP64__ // TODO: implement 64-bit sigaction using rt_sigaction.
action.sa_handler = debuggerd_signal_handler;
#else
action.sa_sigaction = debuggerd_signal_handler;
#endif
action.sa_flags = SA_RESTART | SA_SIGINFO;
// Use the alternate signal stack if available so we can catch stack overflows.