From: Ulrich Weigand Date: Tue, 4 Feb 2014 17:33:04 +0000 (+0100) Subject: PowerPC64 little-endian fixes: 32-bit DFP parameters X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5b757e5ddbd9ad252d9c51103f1aa52b41c2e947;p=binutils-gdb.git PowerPC64 little-endian fixes: 32-bit DFP parameters Passing a 32-bit DFP in register needs to use the least-significant part of the register. Like with a previous patch that addressed the same issue for small structs, this patch makes sure the appropriate offset is used on little-endian systems. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_freg): Use correct offset on little-endian when passing _Decimal32. (ppc64_sysv_abi_return_value_base): Likewise for return values. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 169b027791a..e4a913bff7c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2014-02-04 Ulrich Weigand  + + * ppc-sysv-tdep.c (ppc64_sysv_abi_push_freg): Use correct + offset on little-endian when passing _Decimal32. + (ppc64_sysv_abi_return_value_base): Likewise for return values. + 2014-02-04 Ulrich Weigand  * rs6000-tdep.c (efpr_pseudo_register_read): Use correct offset diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c index 62e9cbdaccb..de5a6631d1d 100644 --- a/gdb/ppc-sysv-tdep.c +++ b/gdb/ppc-sysv-tdep.c @@ -1232,7 +1232,10 @@ ppc64_sysv_abi_push_freg (struct gdbarch *gdbarch, if (argpos->regcache && argpos->freg <= 13) { int regnum = tdep->ppc_fp0_regnum + argpos->freg; - int offset = 8 - TYPE_LENGTH (type); + int offset = 0; + + if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) + offset = 8 - TYPE_LENGTH (type); regcache_cooked_write_part (argpos->regcache, regnum, offset, TYPE_LENGTH (type), val); @@ -1641,7 +1644,10 @@ ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype, && TYPE_CODE (valtype) == TYPE_CODE_DECFLOAT) { int regnum = tdep->ppc_fp0_regnum + 1 + index; - int offset = 8 - TYPE_LENGTH (valtype); + int offset = 0; + + if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) + offset = 8 - TYPE_LENGTH (valtype); if (writebuf != NULL) regcache_cooked_write_part (regcache, regnum,