On OBS with gdb 12.1, for openSUSE Tumbleweed with gcc 12, I run into a large number of FAILs due to a gdb internal error: ... binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns long double _Complex (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/callfuncs.exp: noproto: call inferior func with struct - returns long double _Complex (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tc-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-td-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tf-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-ti-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tl-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tc: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-td: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tf: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-ti: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tl: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_06_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tll: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-ts: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_06_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tldc: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tldc: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tll-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-ts-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/structs.exp: types=tld: p/c fun<n>(); call 1 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/structs.exp: types=tld: p/c fun<n>(); call 2 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/structs.exp: types=tld: return foo<n>; return 1 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.-fno-PIE.-no-pie.sum:FAIL: gdb.base/varargs.exp: print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4) (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns long double _Complex (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/callfuncs.exp: noproto: call inferior func with struct - returns long double _Complex (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tc-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-td-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tf-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-ti-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tl-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tc: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-td: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tf: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-ti: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tl: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tld: get valueof "rtn_str_struct_static_06_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-tll: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld-ts: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tld: get valueof "rtn_str_struct_static_06_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tldc: get valueof "rtn_str_struct_static_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tldc: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-tll-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c++.exp: types-ts-tld: get valueof "rtn_str_struct_static_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tc: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-td: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tf: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ti: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tl: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tld: get valueof "rtn_str_struct_04_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-tll: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld-ts: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tld: get valueof "rtn_str_struct_04_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_01_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_01 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_02 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_03 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: get valueof "rtn_str_struct_02_04 ()" (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/structs.exp: types=tld: p/c fun<n>(); call 1 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/structs.exp: types=tld: p/c fun<n>(); call 2 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/structs.exp: types=tld: return foo<n>; return 1 structs-tld (GDB internal error) binaries-testsuite.openSUSE_Factory_PPC.ppc64le/gdb-testresults/gdb-ppc64le-suse-linux-m64.sum:FAIL: gdb.base/varargs.exp: print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4) (GDB internal error) ... In more detail: ... (gdb) PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double _Complex p t_structs_ldc(struct_val1)^M ../../gdb/ppc-sysv-tdep.c:1945: internal-error: ppc64_sysv_abi_return_value: Assertion `ok' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M ...
I had problems reproducing this, so I write an all-arch selftest: ... diff --git a/gdb/gdbarch-selftests.c b/gdb/gdbarch-selftests.c index 198346bddec..8b6b4c708ab 100644 --- a/gdb/gdbarch-selftests.c +++ b/gdb/gdbarch-selftests.c @@ -122,6 +122,19 @@ register_to_value_test (struct gdbarch *gdbarch) } } +static void +blabla (struct gdbarch *gdbarch) +{ + struct type *t = builtin_type (gdbarch)->builtin_long_double; + struct type *c = init_complex_type ("complex long double", t); + struct type *f = lookup_function_type (c); + struct value *v + = allocate_value_lazy (f); + + gdbarch_return_value (gdbarch, v, c, nullptr, nullptr, nullptr); +} + } // namespace selftests void _initialize_gdbarch_selftests (); @@ -130,4 +143,6 @@ _initialize_gdbarch_selftests () { selftests::register_test_foreach_arch ("register_to_value", selftests::register_to_value_test); + selftests::register_test_foreach_arch ("blabla", + selftests::blabla); } ... And then downgraded the ok asserts in ppc64_sysv_abi_return_value to errors, which can be caught: ... diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c index 6c2fd1bfc99..c0bfd8bcbbd 100644 --- a/gdb/ppc-sysv-tdep.c +++ b/gdb/ppc-sysv-tdep.c @@ -1942,7 +1942,9 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch , struct value *function, { ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache, readbuf, writebuf, i); - gdb_assert (ok); + if (!ok) + error ("ppc64_sysv_abi_return_value problem"); + if (readbuf) readbuf += TYPE_LENGTH (eltype); @@ -1968,7 +1970,8 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch , struct value *function, { ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache, readbuf, writebuf, i); - gdb_assert (ok); + if (!ok) + error ("ppc64_sysv_abi_return_value problem"); if (readbuf) readbuf += TYPE_LENGTH (eltype); @@ -2024,7 +2027,8 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch , struct value *function, { ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache, readbuf, writebuf, i); - gdb_assert (ok); + if (!ok) + error ("ppc64_sysv_abi_return_value problem"); if (readbuf) readbuf += TYPE_LENGTH (eltype); ... I get fails only for the powerpc architecture: ... $ ./gdb.sh -q -batch -ex "maint selftest blabla" 2>&1 | grep -B1 failed Running selftest blabla::powerpc:620. Self test failed: ppc64_sysv_abi_return_value problem Running selftest blabla::powerpc:630. Self test failed: ppc64_sysv_abi_return_value problem -- Running selftest blabla::powerpc:a35. Self test failed: ppc64_sysv_abi_return_value problem -- Running selftest blabla::powerpc:common64. Self test failed: ppc64_sysv_abi_return_value problem -- Running selftest blabla::powerpc:rs64ii. Self test failed: ppc64_sysv_abi_return_value problem Running selftest blabla::powerpc:rs64iii. Self test failed: ppc64_sysv_abi_return_value problem -- Running selftest blabla::z80n. Ran 355 unit tests, 6 failed ... By debugging and comparing with a passing instance, I narrowed down the difference to: ... /* IBM long double stored in two consecutive FPRs. */ if (TYPE_LENGTH (valtype) == 16 && valtype->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ibm_long_double)) { ... which is triggered in the passing case, but for the selftest fails because: ... (gdb) p gdbarch_long_double_format (gdbarch) $2 = (const floatformat **) 0x2707860 <floatformats_ieee_double> ... and then no other case triggers.
(In reply to Tom de Vries from comment #1) > I had problems reproducing this, so I write an all-arch selftest: Submitted RFC for the selftest: https://sourceware.org/pipermail/gdb-patches/2022-June/190114.html
(In reply to Tom de Vries from comment #2) > (In reply to Tom de Vries from comment #1) > > I had problems reproducing this, so I write an all-arch selftest: > > Submitted RFC for the selftest: > https://sourceware.org/pipermail/gdb-patches/2022-June/190114.html So my guess is now that this PR is reproduced by the selftest plus: ... diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 68ef0480219..187104e703c 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -409,7 +409,7 @@ verify_gdbarch (struct gdbarch *gdbarch) gdbarch->double_format = floatformats_ieee_double; /* Skip verify of long_double_bit, invalid_p == 0 */ if (gdbarch->long_double_format == 0) - gdbarch->long_double_format = floatformats_ieee_double; + gdbarch->long_double_format = floatformats_ieee_quad; /* Skip verify of wchar_bit, invalid_p == 0 */ if (gdbarch->wchar_signed == -1) gdbarch->wchar_signed = 1; ... Note that using floatformats_ibm_long_double here instead fixes the osabi=none failure.
Created attachment 14145 [details] Patch that makes print foo() do as much checking as possible in absence of process I managed to reproduce in a cross setting. 1. Use platform openSUSE Tumbleweed x86_64. 2. Reproducer: ... cat min.c long double _Complex foo () { return 1.0; } ... 3. Use powerpc64le-suse-linux-gcc-12 from package cross-ppc64le-gcc12: ... $ powerpc64le-suse-linux-gcc-12 min.c -O2 -c -g ... 4. Note the gnu attributes: ... $ readelf -a min.o ... Attribute Section: gnu File Attributes Tag_GNU_Power_ABI_FP: hard float, 128-bit IEEE long double ... 5. Build gdb with patch, to make print foo() to as much checking as possible in absence of process. 6. Reproduce: ... $ gdb -q -batch min.o -ex "show osabi" -ex "show arch" -ex "print foo()" The current OS ABI is "auto" (currently "GNU/Linux"). The default OS ABI is "GNU/Linux". The target architecture is set to "auto" (currently "powerpc:common64"). warning: No process, proceed with type checking src/gdb/ppc-sysv-tdep.c:1945: internal-error: ppc64_sysv_abi_return_value: Assertion `ok' failed. ...
Reproduced with gdb 11.1 as well. This originally looked like a regression to me, but that was due to comparing with results made with a gcc without --with-long-double-format=ieee.
I tried the min.c example as well without the _Complex, so using long double. But stepping through ppc64_sysv_abi_return_value, I found that the default RETURN_VALUE_STRUCT_CONVENTION is returned, which does not look correct, given that AFAIU the disassembly, registers are used. I went to check what the output was with gdb.base/callfuncs.exp, and found that while complex long double is tested, long double is not.
I finally remembered that I can use osc to build the gdb package for the tumbleweed distro, even if the powerpc machine isn't running tumbleweed. So, I managed to reproduce with the possibility to debug and try out fixes. As a first try, I added this code: ... if (tdep->elf_abi == POWERPC_ELF_V2 && TYPE_LENGTH (valtype) == 16 && valtype->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ia64_quad)) { int regnum = tdep->ppc_vsr0_regnum + 32 + 2 + index; if (writebuf != NULL) { regcache->cooked_write (regnum, writebuf); } if (readbuf != NULL) { regcache->cooked_read (regnum, readbuf); } return 1; } ... and that fixes the problem at hand, iow: ... $ gdb -q -batch -ex start -ex "p t_structs_ldc(struct_val1)" \ ./gdb/testsuite.unix.-m64/outputs/gdb.base/callfuncs/callfuncs Temporary breakpoint 1 at 0x4ce4: file gdb/testsuite/gdb.base/callfuncs.c, line 647. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Temporary breakpoint 1, main () at /home/abuild/rpmbuild/BUILD/gdb-11.1/gdb/testsuite/gdb.base/callfuncs.c:647 647 void *p = malloc (1); $1 = 5 + 5i ... I'm not sure if the tdep->elf_abi == POWERPC_ELF_V2 and gdbarch_long_double_format (gdbarch) == floatformats_ia64_quad are both necessary. Still, four fails lefts: ... FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2) FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4) FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_values(ldc1, ldc2) FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4) ...
(In reply to Tom de Vries from comment #7) > I finally remembered that I can use osc to build the gdb package for the > tumbleweed distro, even if the powerpc machine isn't running tumbleweed. Thanks for looking into this! It seems we indeed forgot to add support for IEEE long double to ppc-sysv-tdep.c ... > As a first try, I added this code: > ... > if (tdep->elf_abi == POWERPC_ELF_V2 > && TYPE_LENGTH (valtype) == 16 > && valtype->code () == TYPE_CODE_FLT > && (gdbarch_long_double_format (gdbarch) > == floatformats_ia64_quad)) > { > int regnum = tdep->ppc_vsr0_regnum + 32 + 2 + index; > > if (writebuf != NULL) > { > regcache->cooked_write (regnum, writebuf); > } > if (readbuf != NULL) > { > regcache->cooked_read (regnum, readbuf); > } > return 1; > } This looks good to me, except for: > I'm not sure if the tdep->elf_abi == POWERPC_ELF_V2 and > gdbarch_long_double_format (gdbarch) == floatformats_ia64_quad are both > necessary. I don't think the elf_abi check is needed, the floatformat check should be enough. > Still, four fails lefts: > ... > FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2) > FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, > ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, > ldc3, ldc4) > FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_values(ldc1, > ldc2) > FAIL: gdb.base/callfuncs.exp: noproto: p > t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, > ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4) > ... There are more places in ppc-sysv-tdep.c that need to handle IEEE long double, in particular ppc64_sysv_abi_push_freg and ppc64_sysv_abi_return_value_base. Those should hopefully fix the above inferior call tests.
Tom, we upgreaded one of our Power 10 boxes from Fedora 35 to 36 a week or so ago. I noticed that test started failing. It hits the assert on the ok as you mentioned. I was just starting to dig into the issue when Will mentioned this issue. Anyway, I was trying to figure out how to add your fix from comment 7. I tried putting it in but I get a compile error on floatformats_ia64_quad. I was wondering if you have a patch to add the code from comment 7 which also includes the define for floatformats_ia64_quad? I have access to a number of Power platforms and can help test and debug the patch. From Ulrich's comments, it looks like there are additional places that need fixing. I have not dug into that yet. Anyway, please let me know if/how I can help with this. Carl Love (cel@us.ibm.com)
Looking at the code from Tom and the comments from Ulrich, it appears that we just need to check for floatformats_ieee_quad in addition to the check for floatformats_ibm_long_double. I created a patch to change the check for floatformats_ibm_long_double to check for both. The patch fixes the assert issue. However, there does appear to be an additional issue with printing the value of long double _Complex with a format of "d". p/d check_arg_struct_01_01 (ref_val_struct_01_01) $1 = 0 (gdb) FAIL: gdb.base/infcall-nested-structs-c.exp: types-tldc: p/d check_arg_struct_01_01 (ref_val_struct_01_01) I notice that the prints fail for: complex, int, length 4 complex, float, length 16 in all cases we have: gdbarch_long_double_format (gdbarch) == floatformats_ieee_quad I added Tom's self test to gdb. With my patch that is checking for IBM long double and ieee quad, the self test causes gdb to assert on the ok. In that case, I see the value is complex, floating point, length 16 and gdbarch_long_double_format (gdbarch) is mapped to floatformats_ieee_double which appears to be consistent with Tom's result. It looks to me as the self test is not being compiled with the correct setting for gdbarch_long_double_format (gdbarch)? I have not figure out why yet, thoughts?
Created attachment 14163 [details] patch to check for IEEE quad and IBM long double Patch to add IEEE quad checking to gdb/ppc-sysv-tdep.c
(In reply to Carl E Love from comment #10) > Looking at the code from Tom and the comments from Ulrich, it appears that > we just need to check for floatformats_ieee_quad in addition to the check > for floatformats_ibm_long_double. I don't think this is correct. The calling convention for 128-bit IEEE floating-point is *different* than the calling convention for 128-bit IBM floating-point, so it's not enough to just add to the test, you actually need to implement the IEEE calling convention! While 128-bit IBM floating-point values are passed in a pair of floating-point registers, 128-bit IEEE floating-point values are passed in a single vector register.
Yes, I hadn't considered they might use different calling conventions. Checking the 64-bit ABI, it says: the IEEE binary 128-bit quad precision type is IEEE 128-bit quad-precision float, page 8. Page 39 says "Parameters and function results in IEEE BINARY 128 QUADRUPLE PRECISION format shall be passed in a single 128-bit vector register as if they were vector values." The IBM extended precision format says, "Parameters and function results in the IBM EXTENDED PRECISION format with a pair of two double-precision floating-point values shall be passed in two successive floating-point registers." So yea, we need to consider the differences. Perhaps that will fix the printing issue I had???
Created attachment 14164 [details] Add IEEE support for float 128-bit Went back and redid the patch to add IEEE support. The updated patch adds the IEEE support for passing the arguments via a vector register. The patch fixes the assertion error, but I still get a number of failures printing the values. I am still missing something in the ABI support. At this point, I am not sure what is wrong/missing in the patch?
(In reply to Carl E Love from comment #14) > Created attachment 14164 [details] > Add IEEE support for float 128-bit > > Went back and redid the patch to add IEEE support. The updated patch adds > the IEEE support for passing the arguments via a vector register. > > The patch fixes the assertion error, but I still get a number of failures > printing the values. I am still missing something in the ABI support. At > this point, I am not sure what is wrong/missing in the patch? The only thing that looks wrong to me is the condition in (new) line 1440. It seems that this erroneously no longer handles any float/double values at all anymore.
Created attachment 14167 [details] Add IEEE support for float 128bit, version 2 > The only thing that looks wrong to me is the condition in (new) line 1440. It > seems that this erroneously no longer handles any float/double values at all > anymore. I think you are referring to this section of code? - if (type->code () == TYPE_CODE_FLT + /* IBM long double uses floating point registers for the 128-bit value. */ + if ((type->code () == TYPE_CODE_FLT + && !(gdbarch_long_double_format (gdbarch) + == floatformats_ieee_quad) && TYPE_LENGTH (type) == 16) || type->code () == TYPE_CODE_DECFLOAT) { I was trying to make sure that the IEEE 128-bit case would be excluded. I think it was only taking that one case out. But, it is hard to read. I rewrote it to make it easier to read. By checking for the IEEE FLOAT 128-bit case first, then TYPE_CODE_FLT you don't need to modify the existing "if (type->code () == TYPE_CODE_FLT" statement. I also found I had missed handling a float case. I fixed that it reduced the number of errors from 72 to 12. I am not sure about the check for aggregate candidate and homogeneous aggregate. Not sure yet what a homogeneous float/vector is and if I need to do something special to check for them in the case of the IEEE FLOAT 128-bit case? Attached latest patch. It has a comments indicating the new code.
(In reply to Carl E Love from comment #16) > Created attachment 14167 [details] > + /* IBM long double uses floating point registers for the 128-bit value. > */ > + if ((type->code () == TYPE_CODE_FLT > + && !(gdbarch_long_double_format (gdbarch) This ^ > + == floatformats_ieee_quad) && TYPE_LENGTH (type) == 16) ends here ^ > || type->code () == TYPE_CODE_DECFLOAT) making the whole thing equivalent to if ((type->code () == TYPE_CODE_FLT && gdbarch_long_double_format (gdbarch) != floatformats_ieee_quad && TYPE_LENGTH (type) == 16) || type->code () == TYPE_CODE_DECFLOAT) so it will no longer be used at all for binary floating-point types of lengths other than 16 bytes. > I was trying to make sure that the IEEE 128-bit case would be excluded. I > think it was only taking that one case out. No, it wasn't. > But, it is hard to read. I > rewrote it to make it easier to read. By checking for the IEEE FLOAT > 128-bit case first, then TYPE_CODE_FLT you don't need to modify the existing > "if (type->code () == TYPE_CODE_FLT" statement. Sure. It seems to me that these changes, in combination with the homogeneous struct changes below, are quite complicated and introduce a lot of code duplication. Maybe it would be preferable to handle this case just once, *in* ppc64_sysv_abi_push_freg, instead of updating all its callers. > I also found I had missed handling a float case. I fixed that it reduced > the number of errors from 72 to 12. I am not sure about the check for > aggregate candidate and homogeneous aggregate. Not sure yet what a > homogeneous float/vector is and if I need to do something special to check > for them in the case of the IEEE FLOAT 128-bit case? Homogeneous structs are structures where all elements have the same type, and that same type is a float or vector type. Those structs are passed as if the members were passed on their own. E.g. an element of type struct { long double x; long double y; } is passed exactly as if it were two arguments of "long double" type each. Therefore, this also does have to take IEEE vs. IBM float 128-bit into account. The ELFv1 ABI did not support that generic homogenous struct case, but still handled *single-element* structures likewise. > Attached latest patch. It has a comments indicating the new code. There are more problems with wrong grouping, this time with '{' nesting in the code added to ppc_sysv_abi_push_dummy_call. Just copy (or even better, restructure the if clauses to re-use) the vector case.
Created attachment 14186 [details] Add IEEE support for float 128bit, version 3 Yes, the previous patch had { issues. I split the patch into a functional change patch and a debug print patch. Unfortunately, I didn't get it done cleanly as I found out later when I compiled just the functional patch. The latest version merges the IEEE Float 128-bit and vector if clauses where possible. It updates ppc64_elfv2_abi_homogeneous_aggregate to support the IEEE 128-bit floating point. That change fixes the rest of the issues with the gdb.base/infcall-nested-structs-c.exp test. The patch also fixes all of the regression failures for gdb.base/infcall-nested-structs-c++.exp. The current patch fixes 8 of the 9 failures in gdb.base/structs.exp. The test description for the one failing test is: "Implemented by calling the one parameter function "Fun$N" which stores its parameter in the global variable "L$N". GDB then examining that global to confirm that the value is as expected." The test defines the global structures: struct struct1 {tA a;}; struct struct2 {tA a; tB b;}; struct struct3 {tA a; tB b; tC c; }; ... and ... struct struct1 foo1 = {'1'}, L1; struct struct2 foo2 = {'a','2'}, L2; struct struct3 foo3 = {'1','b','3'}, L3; ... void Fun1(struct struct1 foo1) { L1 = foo1; } The gdb test prints the value of L1 as follows: p/c L1 $2 = {a = 0 '\000'} (gdb) FAIL: gdb.base/structs.exp: types=tld: p/c L<n>; call 1 structs-tld The tld indicates that the test is for the long double (IEEE Float 128-bit) case. Note, the test p/c L2 $3 = {a = 97 'a', b = 50 '2'} (gdb) PASS: gdb.base/structs.exp: types=tld: p/c fun<n>(); call 2 structs-tld passes. The print for the global values do not appear to use any of the functions in gdb/ppc-sysv-tdep.c. I have yet to find how gdb handles the global variable case. I haven't seen anything yet in the ABI about it either. Any hints on where the issue is for the global case would be appreciated.
For the final failing case, I think the problem is that for a struct with a single element, the ppc64_sysv_abi_push_param code may accidentally run into this code path: /* The ABI (version 1.9) specifies that structs containing a single floating-point value, at any level of nesting of single-member structs, are passed in floating-point registers. */ if (type->code () == TYPE_CODE_STRUCT && type->num_fields () == 1) { while (type->code () == TYPE_CODE_STRUCT && type->num_fields () == 1) type = check_typedef (type->field (0).type ()); if (type->code () == TYPE_CODE_FLT) ppc64_sysv_abi_push_freg (gdbarch, type, val, argpos); } Now there's two problems with this: first of all, this code path should really only be used in ELFv1 - for ELFv2, this should be handled via the homogeneous aggregate rule instead. And secondly, when the path *is* executed (e.g. on big-endian targets), it also should handle IEEE long-double correctly.
Created attachment 14207 [details] Patch to fix the final error Yes,the control flow is executing the ABI (version 1.9) code as noted by Ulrich for ELFv1 when the system is actually using ELFv2, First, added support for IEEE 128-bit float to the code pointed out in comment 19. This fixes the final error even though we are actually not supposed to be executing this code for ELFv2. Second, added a check for ELFv1 so the code is only executed with ELFv1. The test still passes given the previous fixes to the homogeneous aggregate rule. The attachment shows the new code to fix the final bug. Posting it separately to make it easy to review. I will merge the two patches and post the patch on the mailing list for review and approval.
Patch approved, committed. commit ebbac1687d0075c8666b25438fc4f35d3dd1daaa (HEAD -> master, origin/master, origin/HEAD) Author: Carl Love <cel@us.ibm.com> Date: Fri Jul 15 15:30:43 2022 +0000 PowerPC: Add support for IEEE 128-bit format. The test gdb.base/infcall-nested-structs-c.exp fails on a gdb assert in function ppc64_sysv_abi_return_value in file gdb/ppc-sysv-tdep.c. The assert is due to the missing IEEE 128-bit support in file gdb/ppc-sysv-tdep.c. The IBM long double was the initial float 128-bit support added by IBM The IEEE 128-bit support, which is similar IBM long double support, was made the default starting with GCC 12. The floating point format differences include the number of bits used to encode the exponent and significand. Also, IBM long double values are passed in a pair of floating point registers. The IEEE 128-bit value is passed in a single vector register. This patch fixes the gdb_assert (ok); in function ppc64_sysv_abi_return_value in gdb/ppc-sysv-tdep.c by adding IEEE FLOAT 128-bit type support for PowerPC. The patch has been tested on Power 10, ELFv2. It fixes the following list of regression failures on Power 10: gdb.base/infcall-nested-structs-c.exp 192 gdb.base/infcall-nested-structs-c++.exp 76 gdb.base/structs.exp 9 The patch has been tested on Power 8 BE which is ELFv1.
I don't seem to have permission to change the status. I will leave it to Tom to verify the upstream fix and update the bugzilla and status.
(In reply to Carl E Love from comment #22) > I don't seem to have permission to change the status. > > I will leave it to Tom to verify the upstream fix and update the bugzilla > and status. I've backported the patch to gdb 12.1 and verified that the assert doesn't trigger anymore. I've also looked at all the test-cases containing the assert: - gdb.base/callfuncs.exp - gdb.base/infcall-nested-structs-c++.exp - gdb.base/infcall-nested-structs-c.exp - gdb.base/structs.exp - gdb.base/varargs.exp All of them pass without fails, except for varargs.exp, which has: ... (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) ... while this is expected: ... $8 = 4 + 4i^M ... Unfortunately, I don't have access to a machine atm to investigate this.
I checked gdb mainline using a Power 10 system with Red Hat Enterprise Linux release 9.0 (Plow) and the test gdb.base/varargs.exp passes. I downloaded the source tar file for gdb 12.1 and applied the patch. The patch applies without any issues however I get a compile failure: error: ‘floatformats_ieee_quad’ was not declared in this scope; did you mean ‘floatformats_ia64_quad’? I am assuming your backport of my patch fixes that issue. If you can attach the backport of the IEEE 128 support patch that you used, I will see if I can reproduce the issue on my system. I am not sure it is worth me trying to do the backport as well since I can't guarantee the backports will match. Thanks for checking out the patch.
Created attachment 14234 [details] patch backported to gdb 12.1
Looks like the change to the patch was to replace floatformats_ieee_quad with floatformats_ia64_quad. I didn't see any other changes. The patch applied and compiled without any issues. I ran the test make check RUNTESTFLAGS='GDB=/home/carll/bin/gdb gdb.base/varargs.exp ' > out and checked the results in gdb/testsuite/gdb.log ... gdb) PASS: gdb.base/varargs.exp: print find_max_double_real(4, dc1, dc2, dc3, \ dc4) print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)^M $8 = 4 + 4i^M (gdb) PASS: gdb.base/varargs.exp: print find_max_long_double_real(4, ldc1, ldc2\ , ldc3, ldc4) testcase /home/carll/GDB/build-gdb-12.1/gdb/testsuite/../../../gdb-12.1/gdb/tes\ tsuite/gdb.base/varargs.exp completed in 0 seconds === gdb Summary === # of expected passes 11 ... It seemed to work fine. Again, I am using a Power 10 system with Enterprise Linux release 9.0 (Plow). I used the gdb 12.1 source tar file gdb-12.1.tar.gz from https://ftp.gnu.org/gnu/gdb/. I created a git repository with that source before applying the back ported patch. I tried testing with the same source tar file and backported patch on a Power 9 system running Ubuntu 22.04 LTS. The gdb.base/varargs.exp test again runs with all tests passing. Do you have any details on the system where you saw the error? I can see if I can find a machine that matches the specs of the machine that you used to see if I can reproduce the failure.
(In reply to Tom de Vries from comment #23) > Unfortunately, I don't have access to a machine atm to investigate this. I was able to get my hands on a machine, and reproduced it. I minimized it to: ... $ cat gdb/testsuite/gdb.base/varargs.c #include <stdarg.h> #include <stdlib.h> long double _Complex orig = 4.0L + 4.0Li; long double _Complex copy = 0L + 0Li; int test (void) { return 0; } void do_copy (int num_vals, ...) { #if 1 va_list argp; va_start (argp, num_vals); copy = va_arg (argp, long double _Complex); #else copy = orig; #endif } void _start (void) { test (); while (1) ; } ... and: ... $ cat gdb/testsuite/gdb.base/varargs.exp standard_testfile .c set additional_flags {debug} lappend additional_flags "additional_flags=-nostdlib" # build the first test case if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ executable ${additional_flags}] != "" } { untested "failed to compile" return -1 } # Start with a fresh gdb. clean_restart ${binfile} gdb_test_no_output "set print sevenbit-strings" gdb_test_no_output "set print address off" gdb_test_no_output "set width 0" runto test gdb_test "print orig" ".*= 4 \\+ 4i" gdb_test "print copy" ".*= 0 \\+ 0i" gdb_test "print do_copy (1, orig)" with_test_prefix "after copy" { gdb_test "print orig" ".*= 4 \\+ 4i" gdb_test "print copy" ".*= 4 \\+ 4i" } ... This doesn't seem to be related to the return value passing bit, so I propose to close this PR and file a new one (assuming this is an unknown issue).
(In reply to Tom de Vries from comment #27) > This doesn't seem to be related to the return value passing bit, so I > propose to close this PR and file a new one (assuming this is an unknown > issue). Filed PR29543 - "[gdb/tdep] inferior call with complex long double vararg not handled correctly". Marking resolved-fixed.