aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorHui Li <lihui@loongson.cn>2023-03-06 11:55:15 +0800
committerTiezhu Yang <yangtiezhu@loongson.cn>2023-04-14 20:06:20 +0800
commitb8d1a3a8ef9aff015ae963522287f7785bc552ec (patch)
treea3c28e75c66b3c70c0fe3bc2ea04ab9684113a81 /gdb
parentaa2306fbfe2748854439c1ace9ec733560a0746c (diff)
downloadgdb-b8d1a3a8ef9aff015ae963522287f7785bc552ec.zip
gdb-b8d1a3a8ef9aff015ae963522287f7785bc552ec.tar.gz
gdb-b8d1a3a8ef9aff015ae963522287f7785bc552ec.tar.bz2
gdb/testsuite: Skip dump ihex for 64-bit address in gdb.base/dump.exp
(1) Description of problem In the current code, when execute the following test on LoongArch: $make check-gdb TESTS="gdb.base/dump.exp" ``` FAIL: gdb.base/dump.exp: dump array as value, intel hex FAIL: gdb.base/dump.exp: dump struct as value, intel hex FAIL: gdb.base/dump.exp: dump array as memory, ihex FAIL: gdb.base/dump.exp: dump struct as memory, ihex ``` These tests passed on the X86_64, (2) Root cause On LoongArch, variable intarray address 0x120008068 out of range for IHEX, so dump ihex test failed. gdb.base/dump.exp has the following code to check 64-bit address ``` # Check the address of a variable. If it is bigger than 32-bit, # assume our target has 64-bit addresses that are not supported by SREC, # IHEX and TEKHEX. We skip those tests then. set max_32bit_address "0xffffffff" set data_address [get_hexadecimal_valueof "&intarray" 0x100000000] if {${data_address} > ${max_32bit_address}} { set is64bitonly "yes" } ``` We check the "&intarray" on different target as follow: ``` $gdb gdb/testsuite/outputs/gdb.base/dump/dump ... (gdb) start ... On X86_64: (gdb) print /x &intarray $1 = 0x404060 On LoongArch: (gdb) print /x &intarray $1 = 0x120008068 ``` The variable address difference here is due to the link script of linker. ``` On X86_64: $ld --verbose ... PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; On LoongArch: $ld --verbose ... PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x120000000)); . = SEGMENT_START("text-segment", 0x120000000) + SIZEOF_HEADERS; ``` (3) How to fix Because 64-bit variable address out of range for IHEX, it's not an functional problem for LoongArch. Refer to the handling of 64-bit targets in this testsuite, use the "is64bitonly" flag to skip those tests for the target has 64-bit addresses. Signed-off-by: Hui Li <lihui@loongson.cn> Approved-By: Tom Tromey <tom@tromey.com> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/gdb.base/dump.exp22
1 files changed, 14 insertions, 8 deletions
diff --git a/gdb/testsuite/gdb.base/dump.exp b/gdb/testsuite/gdb.base/dump.exp
index bc0ab4a..b361d05 100644
--- a/gdb/testsuite/gdb.base/dump.exp
+++ b/gdb/testsuite/gdb.base/dump.exp
@@ -141,11 +141,14 @@ make_dump_file "dump srec val [set intarr1.srec] intarray" \
make_dump_file "dump srec val [set intstr1.srec] intstruct" \
"dump struct as value, srec"
-make_dump_file "dump ihex val [set intarr1.ihex] intarray" \
- "dump array as value, intel hex"
+# 64-bit address out of range for Intel Hex file
+if {![string compare $is64bitonly "no"]} {
+ make_dump_file "dump ihex val [set intarr1.ihex] intarray" \
+ "dump array as value, intel hex"
-make_dump_file "dump ihex val [set intstr1.ihex] intstruct" \
- "dump struct as value, intel hex"
+ make_dump_file "dump ihex val [set intstr1.ihex] intstruct" \
+ "dump struct as value, intel hex"
+}
make_dump_file "dump tekhex val [set intarr1.tekhex] intarray" \
"dump array as value, tekhex"
@@ -242,11 +245,14 @@ make_dump_file "dump srec mem [set intarr2.srec] $array_start $array_end" \
make_dump_file "dump srec mem [set intstr2.srec] $struct_start $struct_end" \
"dump struct as memory, srec"
-make_dump_file "dump ihex mem [set intarr2.ihex] $array_start $array_end" \
- "dump array as memory, ihex"
+# 64-bit address out of range for Intel Hex file
+if {![string compare $is64bitonly "no"]} {
+ make_dump_file "dump ihex mem [set intarr2.ihex] $array_start $array_end" \
+ "dump array as memory, ihex"
-make_dump_file "dump ihex mem [set intstr2.ihex] $struct_start $struct_end" \
- "dump struct as memory, ihex"
+ make_dump_file "dump ihex mem [set intstr2.ihex] $struct_start $struct_end" \
+ "dump struct as memory, ihex"
+}
make_dump_file "dump tekhex mem [set intarr2.tekhex] $array_start $array_end" \
"dump array as memory, tekhex"