diff options
author | Hui Li <lihui@loongson.cn> | 2023-03-06 11:55:15 +0800 |
---|---|---|
committer | Tiezhu Yang <yangtiezhu@loongson.cn> | 2023-04-14 20:06:20 +0800 |
commit | b8d1a3a8ef9aff015ae963522287f7785bc552ec (patch) | |
tree | a3c28e75c66b3c70c0fe3bc2ea04ab9684113a81 | |
parent | aa2306fbfe2748854439c1ace9ec733560a0746c (diff) | |
download | fsf-binutils-gdb-b8d1a3a8ef9aff015ae963522287f7785bc552ec.zip fsf-binutils-gdb-b8d1a3a8ef9aff015ae963522287f7785bc552ec.tar.gz fsf-binutils-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>
-rw-r--r-- | gdb/testsuite/gdb.base/dump.exp | 22 |
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" |