From 52f548e41f085550d7740c350c1c8a239532af77 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Tue, 4 Feb 2014 18:41:36 +0100 Subject: [PATCH] PowerPC64 ELFv2 ABI: stack frame layout changes This implementes another change in ELFv2: the stack frame no longer contains the reserved double words for linker and compiler use (which weren't really used for much of anything anyway). This affects placement of on-stack parameters in inferior calls. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Use correct offset to the stack parameter list for the ELFv2 ABI. --- gdb/ChangeLog | 5 +++++ gdb/ppc-sysv-tdep.c | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 795e23f129..a479346871 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-02-04 Ulrich Weigand  + + * ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Use correct + offset to the stack parameter list for the ELFv2 ABI. + 2014-02-04 Ulrich Weigand  * ppc-linux-tdep.c (ppc_linux_init_abi): Only call diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c index b7fb4297d3..f6b24bf92a 100644 --- a/gdb/ppc-sysv-tdep.c +++ b/gdb/ppc-sysv-tdep.c @@ -1474,9 +1474,13 @@ ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, argpos.regcache = regcache; argpos.refparam = align_down (sp - refparam_size, 16); argpos.gparam = align_down (argpos.refparam - gparam_size, 16); - /* Add in space for the TOC, link editor double word, - compiler double word, LR save area, CR save area. */ - sp = align_down (argpos.gparam - 48, 16); + /* Add in space for the TOC, link editor double word (v1 only), + compiler double word (v1 only), LR save area, CR save area, + and backchain. */ + if (tdep->elf_abi == POWERPC_ELF_V1) + sp = align_down (argpos.gparam - 48, 16); + else + sp = align_down (argpos.gparam - 32, 16); } /* If the function is returning a `struct', then there is an