libctf, ld: fix test results for upstream GCC
The tests currently in binutils are aimed at the original GCC-based implementation of CTF, which emitted CTF directly from GCC's internal representation. The approach now under review emits CTF from DWARF, with an eye to eventually doing this for all non-DWARF debuginfo-like formats GCC supports. It also uses a different flag to enable CTF emission (-gctf rather than -gt). Adjust the testsuite accordingly. Given that the ld testsuite results are dependent on type ordering, which we do not guarantee at all, it's amazing how little changes. We see a few type ordering differences, slices change because the old GCC was buggy (slices were emitted "backwards", from the wrong end of the machine word) and its expected results were wrong, and GCC now emits the underlying integral type for enumerated types, though CTF has no way to record this yet (coming in v4). GCC also now emits even hidden symbols into the symtab (and thus symtypetab), so one symtypetab test changes its expected results slightly to compensate. Also add tests for the CTF_K_UNKNOWN nonrepresentable type: this couldn't be done before now since the only GCC that emits CTF_K_UNKNOWN for nonrepresentable types is the new one. ld/ChangeLog 2021-05-06 Nick Alcock <nick.alcock@oracle.com> * testsuite/ld-ctf/ctf.exp: Use -gctf, not -gt. * testsuite/lib/ld-lib.exp: Likewise. * testsuite/ld-ctf/nonrepresentable-1.c: New test for nonrepresentable types. * testsuite/ld-ctf/nonrepresentable-2.c: Likewise. * testsuite/ld-ctf/nonrepresentable.d: Likewise. * testsuite/ld-ctf/array.d: Larger type section. * testsuite/ld-ctf/data-func-conflicted.d: Likewise. * testsuite/ld-ctf/enums.d: Likewise. * testsuite/ld-ctf/conflicting-enums.d: Don't compare types. * testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Changed type order. * testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise. * testsuite/ld-ctf/slice.d: Adjust for improved slice emission. libctf/ChangeLog 2021-05-06 Nick Alcock <nick.alcock@oracle.com> * testsuite/lib/ctf-lib.exp: Use -gctf, not -gt. * testsuite/libctf-regression/nonstatic-var-section-ld-r.lk: Hidden symbols now get into the symtypetab anyway.
This commit is contained in:
parent
49da556c65
commit
ae064303ef
16 changed files with 89 additions and 22 deletions
15
ld/ChangeLog
15
ld/ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2021-05-06 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* testsuite/ld-ctf/ctf.exp: Use -gctf, not -gt.
|
||||
* testsuite/lib/ld-lib.exp: Likewise.
|
||||
* testsuite/ld-ctf/nonrepresentable-1.c: New test for nonrepresentable types.
|
||||
* testsuite/ld-ctf/nonrepresentable-2.c: Likewise.
|
||||
* testsuite/ld-ctf/nonrepresentable.d: Likewise.
|
||||
* testsuite/ld-ctf/array.d: Larger type section.
|
||||
* testsuite/ld-ctf/data-func-conflicted.d: Likewise.
|
||||
* testsuite/ld-ctf/enums.d: Likewise.
|
||||
* testsuite/ld-ctf/conflicting-enums.d: Don't compare types.
|
||||
* testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Changed type order.
|
||||
* testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise.
|
||||
* testsuite/ld-ctf/slice.d: Adjust for improved slice emission.
|
||||
|
||||
2021-05-05 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/27825
|
||||
|
|
|
@ -14,7 +14,7 @@ Contents of CTF section .ctf:
|
|||
Version: 4 \(CTF_VERSION_3\)
|
||||
#...
|
||||
Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
|
||||
Type section: .* \(0x5c bytes\)
|
||||
Type section: .* \(0x6c bytes\)
|
||||
String section: .*
|
||||
|
||||
Labels:
|
||||
|
|
|
@ -14,7 +14,7 @@ Contents of CTF section .ctf:
|
|||
Version: 4 \(CTF_VERSION_3\)
|
||||
#...
|
||||
Types:
|
||||
|
||||
#...
|
||||
Strings:
|
||||
#...
|
||||
CTF archive member: .*enum.*\.c:
|
||||
|
|
|
@ -13,12 +13,12 @@ Contents of CTF section \.ctf:
|
|||
|
||||
#...
|
||||
Types:
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 1\) long int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 6\) struct B .*
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 1\) long int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 9\) struct A
|
||||
#...
|
||||
|
|
|
@ -28,13 +28,13 @@ Contents of CTF section .ctf:
|
|||
#...
|
||||
|
||||
Types:
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 6\) struct B .*
|
||||
*\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int .*
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 6\) struct A .*
|
||||
*\[0x0\] a: ID 0x[0-9a-f]*: \(kind 1\) long int .*
|
||||
*\[0x[0-9a-f]*\] foo: ID 0x[0-9a-f]*: \(kind 3\) struct B \* .*
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 6\) struct B .*
|
||||
*\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int .*
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 6\) struct B .*
|
||||
#...
|
||||
|
|
|
@ -42,7 +42,7 @@ foreach ctf_test $ctf_test_list {
|
|||
}
|
||||
}
|
||||
verbose [file rootname $ctf_test]
|
||||
run_dump_test [file rootname $ctf_test] { { cc "-gt -fPIC" } }
|
||||
run_dump_test [file rootname $ctf_test] { { cc "-gctf -fPIC" } }
|
||||
}
|
||||
|
||||
if {[info exists old_lc_all]} {
|
||||
|
|
|
@ -16,7 +16,7 @@ Contents of CTF section \.ctf:
|
|||
Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
|
||||
Function info section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
|
||||
Object index section: .* \(0xc bytes\)
|
||||
Type section: .* \(0xf4 bytes\)
|
||||
Type section: .* \(0x118 bytes\)
|
||||
String section: .*
|
||||
#...
|
||||
Data objects:
|
||||
|
|
|
@ -14,7 +14,7 @@ Contents of CTF section .ctf:
|
|||
#...
|
||||
Compilation unit name: .*enums.c
|
||||
#...
|
||||
Type section: .*\(0x114 bytes\)
|
||||
Type section: .*\(0x134 bytes\)
|
||||
#...
|
||||
Types:
|
||||
0x1: \(kind 8\) enum nine_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
|
@ -27,7 +27,8 @@ Contents of CTF section .ctf:
|
|||
NINE_SEVEN: 260
|
||||
NINE_EIGHT: 261
|
||||
NINE_NINE: 262
|
||||
0x2: \(kind 8\) enum ten_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
0x2: \(kind 1\) .*int \(format 0x[01]\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]\)
|
||||
0x3: \(kind 8\) enum ten_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
TEN_ONE: 10
|
||||
TEN_TWO: 11
|
||||
TEN_THREE: -256
|
||||
|
@ -38,7 +39,8 @@ Contents of CTF section .ctf:
|
|||
TEN_EIGHT: -251
|
||||
TEN_NINE: -250
|
||||
TEN_TEN: -249
|
||||
0x3: \(kind 8\) enum eleven_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
0x4: \(kind 1\) .*int \(format 0x[01]\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
0x5: \(kind 8\) enum eleven_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
ELEVEN_ONE: 10
|
||||
ELEVEN_TWO: 11
|
||||
ELEVEN_THREE: -256
|
||||
|
|
7
ld/testsuite/ld-ctf/nonrepresentable-1.c
Normal file
7
ld/testsuite/ld-ctf/nonrepresentable-1.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
#include <complex.h>
|
||||
|
||||
int foo (complex int a)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
11
ld/testsuite/ld-ctf/nonrepresentable-2.c
Normal file
11
ld/testsuite/ld-ctf/nonrepresentable-2.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include <complex.h>
|
||||
|
||||
extern int foo (complex int);
|
||||
|
||||
int main (void)
|
||||
{
|
||||
complex int a = 33.4;
|
||||
foo (a);
|
||||
|
||||
return 1;
|
||||
}
|
26
ld/testsuite/ld-ctf/nonrepresentable.d
Normal file
26
ld/testsuite/ld-ctf/nonrepresentable.d
Normal file
|
@ -0,0 +1,26 @@
|
|||
#as:
|
||||
#source: nonrepresentable-1.c
|
||||
#source: nonrepresentable-2.c
|
||||
#objdump: --ctf=.ctf
|
||||
#ld: -shared
|
||||
#name: Nonrepresentable types
|
||||
|
||||
.*: +file format .*
|
||||
|
||||
Contents of CTF section .ctf:
|
||||
|
||||
Header:
|
||||
Magic number: 0xdff2
|
||||
Version: 4 \(CTF_VERSION_3\)
|
||||
#...
|
||||
Function objects:
|
||||
#...
|
||||
foo -> 0x[0-9]*: \(kind 5\) int \(\*\) \(\(nonrepresentable type.*\)\) \(aligned at 0x8\)
|
||||
#...
|
||||
Types:
|
||||
#...
|
||||
0x[0-9a-f]*: \(kind 0\) \(nonrepresentable type.*\)
|
||||
#...
|
||||
|
||||
Strings:
|
||||
#...
|
|
@ -15,7 +15,7 @@ Contents of CTF section .ctf:
|
|||
Compilation unit name: .*slice.c
|
||||
#...
|
||||
Data object section: .* \(0x[1-9a-f][0-9a-f]* bytes\)
|
||||
Type section: .* \(0xd0 bytes\)
|
||||
Type section: .* \(0xe0 bytes\)
|
||||
String section: .*
|
||||
#...
|
||||
Data objects:
|
||||
|
@ -25,8 +25,9 @@ Contents of CTF section .ctf:
|
|||
#...
|
||||
0x[0-9a-f]*: \(kind 6\) struct slices \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
|
||||
*\[0x0\] one: ID 0x[0-9a-f]*: \(kind 1\) int:1 \[slice 0x0:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x1\] two: ID 0x[0-9a-f]*: \(kind 1\) int:2 \[slice 0x1:0x2\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x3\] six: ID 0x[0-9a-f]*: \(kind 1\) int:6 \[slice 0x3:0x6\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x9\] ten: ID 0x[0-9a-f]*: \(kind 1\) int:10 \[slice 0x9:0xa\] \(format 0x1\) \(size 0x2\) \(aligned at 0x2\)
|
||||
*\[0x13\] bar: ID 0x[0-9a-f]*: \(kind 8\) enum foo:1 \[slice 0x13:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x1\] two: ID 0x[0-9a-f]*: \(kind 1\) int:2 \[slice 0x0:0x2\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x3\] six: ID 0x[0-9a-f]*: \(kind 1\) int:6 \[slice 0x0:0x6\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
*\[0x9\] ten: ID 0x[0-9a-f]*: \(kind 1\) int:10 \[slice 0x0:0xa\] \(format 0x1\) \(size 0x2\) \(aligned at 0x2\)
|
||||
*\[0x13\] bar: ID 0x[0-9a-f]*: \(kind 8\) enum foo:1 \[slice 0x0:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
|
||||
|
||||
#...
|
||||
|
|
|
@ -1625,7 +1625,7 @@ proc compile_one_cc { src output additional_flags } {
|
|||
return [run_host_cmd_yesno "$CC" "$flags $CFLAGS $additional_flags $src -o $output"]
|
||||
}
|
||||
|
||||
# Returns true if the target compiler supports -gt
|
||||
# Returns true if the target compiler supports -gctf
|
||||
proc check_ctf_available { } {
|
||||
global ctf_available_saved
|
||||
|
||||
|
@ -1639,7 +1639,7 @@ proc check_ctf_available { } {
|
|||
set f [open $src "w"]
|
||||
puts $f "int main() { return 0; }"
|
||||
close $f
|
||||
set ctf_available_saved [compile_one_cc $src $output "-gt -c"]
|
||||
set ctf_available_saved [compile_one_cc $src $output "-gctf -c"]
|
||||
remote_file host delete $src
|
||||
remote_file host delete $output
|
||||
file delete $src
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2021-05-06 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* testsuite/lib/ctf-lib.exp: Use -gctf, not -gt.
|
||||
* testsuite/libctf-regression/nonstatic-var-section-ld-r.lk:
|
||||
Hidden symbols now get into the symtypetab anyway.
|
||||
|
||||
2021-05-06 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-open.c (init_types): Unknown types may have names.
|
||||
|
|
|
@ -197,10 +197,10 @@ proc run_lookup_test { name } {
|
|||
set lookup_flags ""
|
||||
if { $run_ld } {
|
||||
set lookup_output "tmpdir/out.so"
|
||||
set lookup_flags "-gt -fPIC $shared $opts(link_flags)"
|
||||
set lookup_flags "-gctf -fPIC $shared $opts(link_flags)"
|
||||
} else {
|
||||
set lookup_output "tmpdir/out.o"
|
||||
set lookup_flags "-gt -fPIC -c"
|
||||
set lookup_flags "-gctf -fPIC -c"
|
||||
}
|
||||
if [board_info [target_info name] exists cflags] {
|
||||
append lookup_flags " [board_info [target_info name] cflags]"
|
||||
|
|
|
@ -4,4 +4,3 @@
|
|||
# link_flags: -Wl,--ctf-variables -r
|
||||
foo is of type [0-9a-f]*
|
||||
bar is of type [0-9a-f]*
|
||||
foo missing from the data object section
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue