[gdb/tdep] Fix PowerPC IEEE 128-bit format arg passing
authorTom de Vries <tdevries@suse.de>
Fri, 16 Sep 2022 14:40:56 +0000 (16:40 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 16 Sep 2022 14:40:56 +0000 (16:40 +0200)
commitff84aaf3e338702f982274ffb79e93562d05070c
tree327a5e0db49733193928f6b395fde12dc0c25c70
parent77e6e213e0c8e77c53d123244ac75d6a825bda86
[gdb/tdep] Fix PowerPC IEEE 128-bit format arg passing

On a powerpc system with gcc 12 built to default to 128-bit IEEE long double,
I run into:
...
(gdb) print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)^M
$8 = 0 + 0i^M
(gdb) FAIL: gdb.base/varargs.exp: print \
  find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)
...

This is due to incorrect handling of the argument in ppc64_sysv_abi_push_param.

Fix this and similar cases, and expand the test-case to test handling of
homogeneous aggregates.

Tested on ppc64le-linux, power 10.

Co-Authored-By: Ulrich Weigand <uweigand@de.ibm.com>
Tested-by: Carl Love <cel@us.ibm.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29543
gdb/ppc-sysv-tdep.c
gdb/testsuite/gdb.base/varargs.c
gdb/testsuite/gdb.base/varargs.exp