diff options
36 files changed, 443 insertions, 326 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 1497fc4..213aed0 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,39 @@ 2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * testsuite/ld-ctf/array.d: Adjust for dumper changes. + * testsuite/ld-ctf/conflicting-cycle-1.B-1.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-1.B-2.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-1.parent.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-2.A-1.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-2.A-2.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-2.parent.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-3.C-1.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-3.C-2.d: Likewise. + * testsuite/ld-ctf/conflicting-cycle-3.parent.d: Likewise. + * testsuite/ld-ctf/conflicting-enums.d: Likewise. + * testsuite/ld-ctf/conflicting-typedefs.d: Likewise. + * testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Likewise. + * testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d: Likewise. + * testsuite/ld-ctf/cross-tu-into-cycle.d: Likewise. + * testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise. + * testsuite/ld-ctf/cycle-1.d: Likewise. + * testsuite/ld-ctf/cycle-2.A.d: Likewise. + * testsuite/ld-ctf/cycle-2.B.d: Likewise. + * testsuite/ld-ctf/cycle-2.C.d: Likewise. + * testsuite/ld-ctf/data-func-conflicted.d: Likewise. + * testsuite/ld-ctf/diag-cttname-null.d: Likewise. + * testsuite/ld-ctf/diag-cuname.d: Likewise. + * testsuite/ld-ctf/diag-parlabel.d: Likewise. + * testsuite/ld-ctf/diag-wrong-magic-number-mixed.d: Likewise. + * testsuite/ld-ctf/forward.d: Likewise. + * testsuite/ld-ctf/function.d: Likewise. + * testsuite/ld-ctf/slice.d: Likewise. + * testsuite/ld-ctf/super-sub-cycles.d: Likewise. + * testsuite/ld-ctf/enums.c: New test. + * testsuite/ld-ctf/enums.d: New test. + +2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * testsuite/ld-ctf/conflicting-cycle-1.parent.d: Adjust for dumper changes. * testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Likewise. diff --git a/ld/testsuite/ld-ctf/array.d b/ld/testsuite/ld-ctf/array.d index 6c3915a..1637562 100644 --- a/ld/testsuite/ld-ctf/array.d +++ b/ld/testsuite/ld-ctf/array.d @@ -20,8 +20,8 @@ Contents of CTF section .ctf: Labels: Data objects: - digits -> 0x[0-9a-f]*: int \[10\] .* - digits_names -> 0x[0-9a-f]*: char \*\[10\] .* + digits -> 0x[0-9a-f]*: \(kind 4\) int \[10\] .* + digits_names -> 0x[0-9a-f]*: \(kind 4\) char \*\[10\] .* Function objects: @@ -29,7 +29,7 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: .*\[10\] .* + 0x[0-9a-f]*: \(kind 4\) .*\[10\] \(size .* #... - 0x[0-9a-f]*: .*\[10\] .* + 0x[0-9a-f]*: \(kind 4\) .*\[10\] \(size .* #... diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-1.B-1.d b/ld/testsuite/ld-ctf/conflicting-cycle-1.B-1.d index 99b0564..27273c5 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-1.B-1.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-1.B-1.d @@ -30,12 +30,11 @@ CTF archive member: .*/B.c: Function objects: Variables: - b -> 0x80000001: struct B \(size 0x[0-9]*\) + b -> 0x80000001: \(kind 6\) struct B \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: - 0x8[0-9a-f]*: struct B .* - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* c \(.* + 0x8[0-9a-f]*: \(kind 6\) struct B .* + *\[0x0\] c: ID 0x[0-9a-f]*: \(kind 3\) struct C \* \(.* Strings: #... diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-1.B-2.d b/ld/testsuite/ld-ctf/conflicting-cycle-1.B-2.d index 32bc5c2..28a92f4 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-1.B-2.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-1.B-2.d @@ -30,13 +30,12 @@ CTF archive member: .*/B-2.c: Function objects: Variables: - b -> 0x80000001: struct B \(.* + b -> 0x80000001: \(kind 6\) struct B \(.* Types: - 0x8[0-9a-f]*: struct B \(.* - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* c \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 1\) int wombat:32 \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) + 0x8[0-9a-f]*: \(kind 6\) struct B \(.* + *\[0x0\] c: ID 0x[0-9a-f]*: \(kind 3\) struct C \* \(.* + *\[0x[0-9a-f]*\] wombat: ID 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: #... diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-1.parent.d b/ld/testsuite/ld-ctf/conflicting-cycle-1.parent.d index 5da66fda..a9755e8 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-1.parent.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-1.parent.d @@ -29,8 +29,7 @@ Contents of CTF section .ctf: #... Types: #... - 0x[0-9a-f]*: struct B - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 9\) struct B + 0x[0-9a-f]*: \(kind 9\) struct B #... CTF archive member: .*: #... diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-2.A-1.d b/ld/testsuite/ld-ctf/conflicting-cycle-2.A-1.d index 5e5fade..33ed6e8 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-2.A-1.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-2.A-1.d @@ -29,12 +29,11 @@ CTF archive member: .*/A.c: Function objects: Variables: - a -> 0x80000001: struct A \(size 0x[0-9a-f]*\) + a -> 0x80000001: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: - 0x8[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct A \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(aligned at 0x[0-9a-f]*\) + 0x8[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-2.A-2.d b/ld/testsuite/ld-ctf/conflicting-cycle-2.A-2.d index ff6785cf..a98b66c 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-2.A-2.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-2.A-2.d @@ -29,13 +29,12 @@ CTF archive member: .*/A-2.c: Function objects: Variables: - a -> 0x80000001: struct A \(size 0x[0-9a-f]*\) + a -> 0x80000001: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: - 0x8[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct A \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(aligned at 0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 1\) int wombat:32 \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) + 0x8[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x[0-9a-f]*\] wombat: ID 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-2.parent.d b/ld/testsuite/ld-ctf/conflicting-cycle-2.parent.d index d111ef7..87ec41d 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-2.parent.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-2.parent.d @@ -28,13 +28,12 @@ Contents of CTF section .ctf: Function objects: Variables: - cycle_1 -> 0x[0-9a-f]*: struct cycle_1 \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]*: struct cycle_1 \(size 0x[0-9a-f]*\) + cycle_1 -> 0x[0-9a-f]*: \(kind 3\) struct cycle_1 \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 6\) struct cycle_1 \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: #... - 0x[0-9a-f]*: struct cycle_1 \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct cycle_1 \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(aligned at 0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(aligned at 0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct cycle_1 \* next \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 6\) struct cycle_1 \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x[0-9a-f]*\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x[0-9a-f]*\] next: ID 0x[0-9a-f]*: \(kind 3\) struct cycle_1 \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-3.C-1.d b/ld/testsuite/ld-ctf/conflicting-cycle-3.C-1.d index df61153..ac750a7 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-3.C-1.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-3.C-1.d @@ -28,12 +28,11 @@ CTF archive member: .*/C.c: Function objects: Variables: - c -> 0x80000001: struct C \(size 0x[0-9a-f]*\) + c -> 0x80000001: \(kind 6\) struct C \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: - 0x8[0-9a-f]*: struct C \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct C \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(aligned at 0x[0-9a-f]*\) + 0x80000001: \(kind 6\) struct C \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-3.C-2.d b/ld/testsuite/ld-ctf/conflicting-cycle-3.C-2.d index e1cfd0c..603432f 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-3.C-2.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-3.C-2.d @@ -28,13 +28,12 @@ CTF archive member: .*/C-2.c: Function objects: Variables: - c -> 0x80000001: struct C \(size 0x[0-9a-f]*\) + c -> 0x80000001: \(kind 6\) struct C \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Types: - 0x8[0-9a-f]*: struct C \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 6\) struct C \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(aligned at 0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 1\) int wombat:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) + 0x80000001: \(kind 6\) struct C \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + \[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + \[0x[0-9a-f]*\] wombat: ID 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/conflicting-cycle-3.parent.d b/ld/testsuite/ld-ctf/conflicting-cycle-3.parent.d index 11d2a04..24f0800 100644 --- a/ld/testsuite/ld-ctf/conflicting-cycle-3.parent.d +++ b/ld/testsuite/ld-ctf/conflicting-cycle-3.parent.d @@ -30,8 +30,7 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: int \[0x0:0x[0-9a-f]*\] \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/conflicting-enums.d b/ld/testsuite/ld-ctf/conflicting-enums.d index b93d812..f90aaef 100644 --- a/ld/testsuite/ld-ctf/conflicting-enums.d +++ b/ld/testsuite/ld-ctf/conflicting-enums.d @@ -20,16 +20,28 @@ Contents of CTF section .ctf: CTF archive member: .*enum.*\.c: #... Types: - 0x8[0-9a-f]*: enum day_of_the_week \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 8\) enum day_of_the_week \(aligned at 0x[0-9a-f]*\) + 0x80000001: \(kind 8\) enum day_of_the_week \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + Sunday: 0 + Monday: 1 + Tuesday: 2 + Wednesday: 3 + Thursday: 4 + Friday: 5 + Saturday: 6 Strings: #... CTF archive member: .*enum.*\.c: #... Types: - 0x8[0-9a-f]*: enum day_of_the_week \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x8[0-9a-f]*\) \(kind 8\) enum day_of_the_week \(aligned at 0x[0-9a-f]*\) + 0x80000001: \(kind 8\) enum day_of_the_week \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + Monday: 0 + Tuesday: 1 + Wednesday: 2 + Thursday: 3 + Friday: 4 + Saturday: 5 + Sunday: 6 Strings: #... diff --git a/ld/testsuite/ld-ctf/conflicting-typedefs.d b/ld/testsuite/ld-ctf/conflicting-typedefs.d index 309e453..72082ba 100644 --- a/ld/testsuite/ld-ctf/conflicting-typedefs.d +++ b/ld/testsuite/ld-ctf/conflicting-typedefs.d @@ -14,20 +14,16 @@ Contents of CTF section .ctf: Version: 4 \(CTF_VERSION_3\) #... Types: - 0x1: .*int .* - .* - 0x[0-9]:.*int .* - .* - 0x[0-9]: word .* - *\[0x0\] \(ID 0x[0-9]\) \(kind 10\) word \(aligned at 0x[48]\) + 0x1: .*int .* + 0x[0-9]:.*int .* + 0x[0-9]: \(kind 10\) word .* -> 0x[0-9]: \(kind 1\) .*int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: #... CTF archive member: .*typedef.*\.c: #... Types: - 0x80000001: word .* - *\[0x0\] \(ID 0x80000001\) \(kind 10\) word \(aligned at 0x[48]\) + 0x80000001: \(kind 10\) word .* -> 0x[0-9]: \(kind 1\) .*int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) Strings: #... diff --git a/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d b/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d index eff295e..eaf8e79 100644 --- a/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d +++ b/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d @@ -14,20 +14,15 @@ Contents of CTF section \.ctf: #... Types: #... - 0x[0-9a-f]*: long int \[0x0:0x[0-9a-f]*\] \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0: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]*: struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B .* + 0x[0-9a-f]*: \(kind 6\) struct B .* #... - 0x[0-9a-f]*: int \[0x0:0x[0-9a-f]*\] \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... - 0x[0-9a-f]*: struct A - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 9\) struct A + 0x[0-9a-f]*: \(kind 9\) struct A #... - 0x[0-9a-f]*: struct C .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct C .* + 0x[0-9a-f]*: \(kind 6\) struct C .* #... Strings: @@ -36,10 +31,9 @@ Contents of CTF section \.ctf: CTF archive member: .*/ld/testsuite/ld-ctf/cross-tu-cyclic-1\.c: #... Types: - 0x80.*[0-9a-f]*: struct A .* - *\[0x0\] \(ID 0x80.*\) \(kind 6\) struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int a:.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* foo .* + 0x80[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 \* .* Strings: #... @@ -47,11 +41,10 @@ CTF archive member: .*/ld/testsuite/ld-ctf/cross-tu-cyclic-1\.c: CTF archive member: .*/ld/testsuite/ld-ctf/cross-tu-cyclic-2\.c: #... Types: - 0x80.*[0-9a-f]*: struct A .* - *\[0x0\] \(ID 0x80.*\) \(kind 6\) struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int a:.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* foo .* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* bar .* + 0x80[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]*\] bar: ID 0x[0-9a-f]*: \(kind 3\) struct C \* .* Strings: #... diff --git a/ld/testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d b/ld/testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d index 9b0d738..1a71484 100644 --- a/ld/testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d +++ b/ld/testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d @@ -29,22 +29,16 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]\) \(kind 6\) struct A \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int a:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* foo \(aligned at 0x[0-9a-f]*\) - 0x[0-9a-f]*: long int .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int:[0-9].* - 0x[0-9a-f]*: struct B \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B \(aligned at 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int foo:[0-9]* \(aligned at 0x[0-9a-f]*, format 0x1, offset:bits 0x0:0x[0-9a-f]*\) - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* bar \(aligned at 0x[0-9a-f]*\) - 0x[0-9a-f]*: struct B \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]*: struct B \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* \(aligned at 0x[0-9a-f]*\) - 0x[0-9a-f]*: struct A \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* \(aligned at 0x[0-9a-f]*\) - 0x[0-9a-f]*: int .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int:.* + 0x[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] a: ID 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]*\] foo: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 1\) long int .* + 0x[0-9a-f]*: \(kind 6\) struct B \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + *\[0x[0-9a-f]*\] bar: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + 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 \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 1\) int .* Strings: #... diff --git a/ld/testsuite/ld-ctf/cross-tu-into-cycle.d b/ld/testsuite/ld-ctf/cross-tu-into-cycle.d index a21fedc..7f3aebc 100644 --- a/ld/testsuite/ld-ctf/cross-tu-into-cycle.d +++ b/ld/testsuite/ld-ctf/cross-tu-into-cycle.d @@ -27,20 +27,16 @@ Contents of CTF section .ctf: Function objects: Variables: - a -> .* - conflicty -> .* + a -> .* + conflicty -> .* Types: - 0x[0-9a-f]*: struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* foo .* - 0x[0-9a-f]*: struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* next .* - 0x[0-9a-f]*: struct B \* .* - *\[0x0\] .* - 0x[0-9a-f]*: struct A \* .* - *\[0x0\] .* + 0x[0-9a-f]*: \(kind 6\) struct A .* + *\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 3\) struct B \* .* + 0x[0-9a-f]*: \(kind 6\) struct B .* + *\[0x0\] next: ID 0x[0-9a-f]*: \(kind 3\) struct B \* .* + 0x[0-9a-f]*: \(kind 3\) struct B \* .* + 0x[0-9a-f]*: \(kind 3\) struct A \* .* Strings: #... @@ -56,7 +52,7 @@ CTF archive member: .*/ld/testsuite/ld-ctf/cross-tu-cyclic-[34].c: Function objects: Variables: - conflicty -> .* + conflicty -> .* Types: diff --git a/ld/testsuite/ld-ctf/cross-tu-noncyclic.d b/ld/testsuite/ld-ctf/cross-tu-noncyclic.d index d96e5d2..e8fc7a4 100644 --- a/ld/testsuite/ld-ctf/cross-tu-noncyclic.d +++ b/ld/testsuite/ld-ctf/cross-tu-noncyclic.d @@ -29,18 +29,14 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) long int a:[0-9]* .* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* foo .* + 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]*: struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int foo:[0-9]* .* + 0x[0-9a-f]*: \(kind 6\) struct B .* + *\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int .* #... - 0x[0-9a-f]*: struct B \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]*: struct B .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* .* + 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 .* #... - 0x[0-9a-f]*: struct A \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]*: struct A .* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* .* + 0x[0-9a-f]*: \(kind 3\) struct A \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 6\) struct A .* #... diff --git a/ld/testsuite/ld-ctf/cycle-1.d b/ld/testsuite/ld-ctf/cycle-1.d index 5787093..e64608e 100644 --- a/ld/testsuite/ld-ctf/cycle-1.d +++ b/ld/testsuite/ld-ctf/cycle-1.d @@ -28,9 +28,8 @@ Contents of CTF section .ctf: #... Types: #... - 0x[0-9a-f]*: struct cycle_1 \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct cycle_1 \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct cycle_1 \* next \(.* + 0x[0-9a-f]*: \(kind 6\) struct cycle_1 \(.* + *\[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(.* + *\[0x[0-9a-f]*\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* + *\[0x[0-9a-f]*\] next: ID 0x[0-9a-f]*: \(kind 3\) struct cycle_1 \* \(.* #... diff --git a/ld/testsuite/ld-ctf/cycle-2.A.d b/ld/testsuite/ld-ctf/cycle-2.A.d index ddb5381..39d48c1 100644 --- a/ld/testsuite/ld-ctf/cycle-2.A.d +++ b/ld/testsuite/ld-ctf/cycle-2.A.d @@ -25,13 +25,12 @@ Contents of CTF section .ctf: Variables: #... - a -> 0x[0-9a-f]*: struct A \(.* + a -> 0x[0-9a-f]*: \(kind 6\) struct A \(.* #... Types: #... - 0x[0-9a-f]*: struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* + 0x[0-9a-f]*: \(kind 6\) struct A \(.* + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/cycle-2.B.d b/ld/testsuite/ld-ctf/cycle-2.B.d index 1d1cdc5..4babd97 100644 --- a/ld/testsuite/ld-ctf/cycle-2.B.d +++ b/ld/testsuite/ld-ctf/cycle-2.B.d @@ -25,13 +25,12 @@ Contents of CTF section .ctf: Variables: #... - b -> 0x[0-9a-f]*: struct B \(.* + b -> 0x[0-9a-f]*: \(kind 6\) struct B \(.* #... Types: #... - 0x[0-9a-f]*: struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* c \(.* + 0x[0-9a-f]*: \(kind 6\) struct B \(.* + *\[0x0\] c: ID 0x[0-9a-f]*: \(kind 3\) struct C \* \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/cycle-2.C.d b/ld/testsuite/ld-ctf/cycle-2.C.d index 4d8f145..757483c 100644 --- a/ld/testsuite/ld-ctf/cycle-2.C.d +++ b/ld/testsuite/ld-ctf/cycle-2.C.d @@ -25,13 +25,12 @@ Contents of CTF section .ctf: Variables: #... - c -> 0x[0-9a-f]*: struct C \(.* + c -> 0x[0-9a-f]*: \(kind 6\) struct C \(.* #... Types: #... - 0x[0-9a-f]*: struct C \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct C \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(.* + 0x[0-9a-f]*: \(kind 6\) struct C \(.* + *\[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/data-func-conflicted.d b/ld/testsuite/ld-ctf/data-func-conflicted.d index e51bb76..6b1e914 100644 --- a/ld/testsuite/ld-ctf/data-func-conflicted.d +++ b/ld/testsuite/ld-ctf/data-func-conflicted.d @@ -20,16 +20,16 @@ Contents of CTF section \.ctf: String section: .* #... Data objects: - bar -> 0x[0-9a-f]*: struct var_3 \(size 0x[0-9a-f]*\) - var_1 -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_666 -> 0x[0-9a-f]*: foo_t \* \(size 0x[0-9a-f]*\) -> .* + bar -> 0x[0-9a-f]*: \(kind 6\) struct var_3 \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + var_1 -> 0x[0-9a-f]*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_666 -> 0x[0-9a-f]*: \(kind 3\) foo_t \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* Function objects: - func_[0-9]* -> 0x[0-9a-f]*: void \*\(\*\) \(const char \*restrict, int \(\*\)\(\*\) \(const char \*\)\) + func_[0-9]* -> 0x[0-9a-f]*: \(kind 5\) void \*\(\*\) \(const char \*restrict, int \(\*\)\(\*\) \(const char \*\)\) \(aligned at 0x[0-9a-f]*\) #... Types: #... - .*: struct var_3 .* + .*: \(kind 6\) struct var_3 .* #... CTF archive member: .*/data-func-1\.c: @@ -46,18 +46,19 @@ CTF archive member: .*/data-func-1\.c: Labels: Data objects: - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* - var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x80000001*: \(kind 10\) foo_t \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> .* #... Function objects: Variables: Types: - 0x80000001: foo_t .* -> .* int .* + 0x80000001: \(kind 10\) foo_t .* -> .* int .* #... diff --git a/ld/testsuite/ld-ctf/diag-cttname-null.d b/ld/testsuite/ld-ctf/diag-cttname-null.d index 86a7fd1..d1ca0b1 100644 --- a/ld/testsuite/ld-ctf/diag-cttname-null.d +++ b/ld/testsuite/ld-ctf/diag-cttname-null.d @@ -13,11 +13,10 @@ Contents of CTF section .ctf: Version: 4 \(CTF_VERSION_3\) #... Data objects: - a -> 0x[0-9a-f]*: struct \(size 0x[0-9a-f]*\) + a -> 0x[0-9a-f]*: \(kind 6\) struct \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... Types: #... - 0x[0-9a-f]*: struct \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* + 0x[0-9a-f]*: \(kind 6\) struct \(.* + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* #... diff --git a/ld/testsuite/ld-ctf/diag-cuname.d b/ld/testsuite/ld-ctf/diag-cuname.d index 20624fd..e4d4926 100644 --- a/ld/testsuite/ld-ctf/diag-cuname.d +++ b/ld/testsuite/ld-ctf/diag-cuname.d @@ -21,7 +21,7 @@ Contents of CTF section .ctf: Labels: Data objects: - a -> 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) + a -> 0x[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... Function objects: @@ -29,9 +29,8 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* + 0x[0-9a-f]*: \(kind 6\) struct A \(.* + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/diag-parlabel.d b/ld/testsuite/ld-ctf/diag-parlabel.d index 5ad5870..bba161c 100644 --- a/ld/testsuite/ld-ctf/diag-parlabel.d +++ b/ld/testsuite/ld-ctf/diag-parlabel.d @@ -20,7 +20,7 @@ Contents of CTF section .ctf: Labels: Data objects: - a -> 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) + a -> 0x[0-9a-f]*: \(kind 6\) struct A \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) #... Function objects: @@ -28,9 +28,8 @@ Contents of CTF section .ctf: Types: #... - 0x[0-9a-f]*: struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* + 0x[0-9a-f]*: \(kind 6\) struct A \(.* + *\[0x0\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/diag-wrong-magic-number-mixed.d b/ld/testsuite/ld-ctf/diag-wrong-magic-number-mixed.d index 8fc1cc8..668fa15 100644 --- a/ld/testsuite/ld-ctf/diag-wrong-magic-number-mixed.d +++ b/ld/testsuite/ld-ctf/diag-wrong-magic-number-mixed.d @@ -29,9 +29,9 @@ Contents of CTF section .ctf: #... Types: #... - 0x[0-9a-f]*: struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* c \(.* + 0x[0-9a-f]*: struct B \(.* + *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B \(.* + *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct C \* c \(.* #... Strings: 0x0: diff --git a/ld/testsuite/ld-ctf/enums.c b/ld/testsuite/ld-ctf/enums.c new file mode 100644 index 0000000..b7c5587 --- /dev/null +++ b/ld/testsuite/ld-ctf/enums.c @@ -0,0 +1,3 @@ +enum nine_els { NINE_ONE, NINE_TWO, NINE_THREE = 256, NINE_FOUR, NINE_FIVE, NINE_SIX, NINE_SEVEN, NINE_EIGHT, NINE_NINE } nine; +enum ten_els { TEN_ONE = 10, TEN_TWO, TEN_THREE = -256, TEN_FOUR, TEN_FIVE, TEN_SIX, TEN_SEVEN, TEN_EIGHT, TEN_NINE, TEN_TEN } ten; +enum eleven_els { ELEVEN_ONE = 10, ELEVEN_TWO, ELEVEN_THREE = -256, ELEVEN_FOUR, ELEVEN_FIVE, ELEVEN_SIX, ELEVEN_SEVEN, ELEVEN_EIGHT, ELEVEN_NINE, ELEVEN_TEN, ELEVEN_ELEVEN } eleven; diff --git a/ld/testsuite/ld-ctf/enums.d b/ld/testsuite/ld-ctf/enums.d new file mode 100644 index 0000000..f1cf70d --- /dev/null +++ b/ld/testsuite/ld-ctf/enums.d @@ -0,0 +1,54 @@ +#as: +#source: enums.c +#objdump: --ctf=.ctf +#ld: -shared +#name: Enumerated types + +.*: +file format .* + +Contents of CTF section .ctf: + + Header: + Magic number: 0xdff2 + Version: 4 \(CTF_VERSION_3\) +#... + Compilation unit name: .*enums.c +#... + Type section: .*\(0x114 bytes\) +#... + Types: + 0x1: \(kind 8\) enum nine_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) + NINE_ONE: 0 + NINE_TWO: 1 + NINE_THREE: 256 + NINE_FOUR: 257 + NINE_FIVE: 258 + NINE_SIX: 259 + 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]*\) + TEN_ONE: 10 + TEN_TWO: 11 + TEN_THREE: -256 + TEN_FOUR: -255 + TEN_FIVE: -254 + TEN_SIX: -253 + TEN_SEVEN: -252 + 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]*\) + ELEVEN_ONE: 10 + ELEVEN_TWO: 11 + ELEVEN_THREE: -256 + ELEVEN_FOUR: -255 + ELEVEN_FIVE: -254 + \.\.\. + ELEVEN_SEVEN: -252 + ELEVEN_EIGHT: -251 + ELEVEN_NINE: -250 + ELEVEN_TEN: -249 + ELEVEN_ELEVEN: -248 + +#... diff --git a/ld/testsuite/ld-ctf/forward.d b/ld/testsuite/ld-ctf/forward.d index 9ff0dd2..bb92961 100644 --- a/ld/testsuite/ld-ctf/forward.d +++ b/ld/testsuite/ld-ctf/forward.d @@ -16,8 +16,6 @@ Contents of CTF section .ctf: #... Types: - 0x[0-9a-f]: struct foo - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 9\) struct foo - 0x[0-9a-f]: struct foo \* \(size 0x[0-9a-f]*\) -> 0x[0-9a-f]: struct foo - *\[0x0\] \(ID 0x[0-9a-f]\) \(kind 3\) struct foo \* \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]: \(kind 9\) struct foo + 0x[0-9a-f]: \(kind 3\) struct foo \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]: \(kind 9\) struct foo #... diff --git a/ld/testsuite/ld-ctf/function.d b/ld/testsuite/ld-ctf/function.d index 9bf26a4..1584bdb 100644 --- a/ld/testsuite/ld-ctf/function.d +++ b/ld/testsuite/ld-ctf/function.d @@ -18,10 +18,9 @@ Contents of CTF section .ctf: String section: .* #... Function objects: - foo -> 0x[0-9a-f]*: int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) + foo -> 0x[0-9a-f]*: \(kind 5\) int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) \(aligned at 0x[0-9a-f]*\) #... Types: #... - 0x[0-9a-f]*: int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 5\) int \(\*\) \(char, int[0-9]*, float, void \*, void \(\*\)\(\*\) \(int\)\) \(aligned at 0x[0-9a-f]*\) + 0x[0-9a-f]*: \(kind 5\) int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) \(aligned at 0x[0-9a-f]*\) #... diff --git a/ld/testsuite/ld-ctf/slice.d b/ld/testsuite/ld-ctf/slice.d index 3967a2d..d116782 100644 --- a/ld/testsuite/ld-ctf/slice.d +++ b/ld/testsuite/ld-ctf/slice.d @@ -19,14 +19,14 @@ Contents of CTF section .ctf: String section: .* #... Data objects: - slices -> 0x[0-9a-f]*: struct slices \(size 0x[0-9a-f]*\) + slices -> 0x[0-9a-f]*: \(kind 6\) struct slices \(size 0x[0-9a-f]*\) \(aligned at 0x1*\) #... Types: #... - 0x[0-9a-f]*: struct slices \(size 0x[0-9a-f]*\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct slices \(aligned at 0x1\) - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 1\) int one:1 \(aligned at 0x1, format 0x1, offset:bits 0x0:0x1\) - *\[0x1\] \(ID 0x[0-9a-f]*\) \(kind 1\) int two:2 \(aligned at 0x1, format 0x1, offset:bits 0x1:0x2\) - *\[0x3\] \(ID 0x[0-9a-f]*\) \(kind 1\) int six:6 \(aligned at 0x1, format 0x1, offset:bits 0x3:0x6\) - *\[0x9\] \(ID 0x[0-9a-f]*\) \(kind 1\) int ten:10 \(aligned at 0x2, format 0x1, offset:bits 0x9:0xa\) + 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\) + #... diff --git a/ld/testsuite/ld-ctf/super-sub-cycles.d b/ld/testsuite/ld-ctf/super-sub-cycles.d index 65a43a4..67fa358 100644 --- a/ld/testsuite/ld-ctf/super-sub-cycles.d +++ b/ld/testsuite/ld-ctf/super-sub-cycles.d @@ -18,18 +18,17 @@ Contents of CTF section .ctf: #... Types: #... - 0x[0-9a-f]*: struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct A \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct B b \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct C c \(.* - *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct A \* a \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct D d \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct D d \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct B \* b \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct X x \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct Y y \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 6\) struct Z z \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct Y \* y \(.* - *\[0x[0-9a-f]*\] \(ID 0x[0-9a-f]*\) \(kind 3\) struct D \* d \(.* + 0x[0-9a-f]: \(kind 6\) struct A \(.* + \[0x0\] b: ID 0x[0-9a-f]*: \(kind 6\) struct B \(.* + \[0x0\] c: ID 0x[0-9a-f]*: \(kind 6\) struct C \(.* + \[0x0\] a: ID 0x[0-9a-f]*: \(kind 3\) struct A \* \(.* + \[0x[0-9a-f]*\] d: ID 0x[0-9a-f]*: \(kind 6\) struct D \(.* + \[0x[0-9a-f]*\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* + \[0x[0-9a-f]*\] d: ID 0x[0-9a-f]*: \(kind 6\) struct D \(.* + \[0x[0-9a-f]*\] b: ID 0x[0-9a-f]*: \(kind 3\) struct B \* \(.* + \[0x[0-9a-f]*\] x: ID 0x[0-9a-f]*: \(kind 6\) struct X \(.* + \[0x[0-9a-f]*\] y: ID 0x[0-9a-f]*: \(kind 6\) struct Y \(.* + \[0x[0-9a-f]*\] z: ID 0x[0-9a-f]*: \(kind 6\) struct Z \(.* + \[0x[0-9a-f]*\] y: ID 0x[0-9a-f]*: \(kind 3\) struct Y \* \(.* + \[0x[0-9a-f]*\] d: ID 0x[0-9a-f]*: \(kind 3\) struct D \* \(.* #... diff --git a/libctf/ChangeLog b/libctf/ChangeLog index b914254..8ba75f3 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,28 @@ 2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * ctf-decl.c (ctf_decl_push): Exclude slices from the decl stack. + * ctf-types.c (ctf_type_aname): No longer deal with slices here. + * ctf-dump.c (ctf_dump_membstate_t) <cdm_toplevel_indent>: Constify. + (CTF_FT_REFS): New. + (CTF_FT_BITFIELD): Likewise. + (CTF_FT_ID): Likewise. + (ctf_dump_member): Do not do indentation here. Migrate the + type-printing parts of this into... + (ctf_dump_format_type): ... here, to be shared by all type printers. + Get the errno value for non-representable types right. Do not print + bitfield info for non-bitfields. Improve the format and indentation + of other type output. Shuffle spacing around to make all indentation + either 'width of column' or 4 chars. + (ctf_dump_label): Pass CTF_FT_REFS to ctf_dump_format_type. + (ctf_dump_objts): Likewise. Spacing shuffle. + (ctf_dump_var): Likewise. + (type_hex_digits): Migrate down in the file, to above its new user. + (ctf_dump_type): Indent here instead. Pass CTF_FT_REFS to + ctf_dump_format_type. Don't trim off excess linefeeds now we no + longer generate them. Dump enumerated types. + +2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * ctf-types.c (ctf_type_resolve): Improve comment. (ctf_type_size): Yield ECTF_INCOMPLETE when applied to forwards. Emit errors into the right dict. diff --git a/libctf/ctf-decl.c b/libctf/ctf-decl.c index 232ff5d..269eca4 100644 --- a/libctf/ctf-decl.c +++ b/libctf/ctf-decl.c @@ -117,9 +117,10 @@ ctf_decl_push (ctf_decl_t *cd, ctf_dict_t *fp, ctf_id_t type) break; case CTF_K_SLICE: + /* Slices themselves have no print representation and should not appear in + the decl stack. */ ctf_decl_push (cd, fp, ctf_type_reference (fp, type)); - prec = CTF_PREC_BASE; - break; + return; case CTF_K_VOLATILE: case CTF_K_CONST: diff --git a/libctf/ctf-dump.c b/libctf/ctf-dump.c index abed483..758d28d 100644 --- a/libctf/ctf-dump.c +++ b/libctf/ctf-dump.c @@ -47,7 +47,7 @@ typedef struct ctf_dump_membstate { char **cdm_str; ctf_dict_t *cdm_fp; - char *cdm_toplevel_indent; + const char *cdm_toplevel_indent; } ctf_dump_membstate_t; static int @@ -80,8 +80,12 @@ ctf_dump_free (ctf_dump_state_t *state) } } -/* Return a dump for a single type, without member info: but do show the - type's references. */ +/* Return a dump for a single type, without member info: but do optionally show + the type's references. */ + +#define CTF_FT_REFS 0x2 /* Print referenced types. */ +#define CTF_FT_BITFIELD 0x4 /* Print :BITS if a bitfield. */ +#define CTF_FT_ID 0x8 /* Print "ID: " in front of type IDs. */ static char * ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) @@ -89,14 +93,16 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) ctf_id_t new_id; char *str = NULL, *bit = NULL, *buf = NULL; + ctf_set_errno (fp, 0); new_id = id; do { - ctf_encoding_t enc; + ctf_encoding_t ep; ctf_arinfo_t ar; int kind, unsliced_kind; const char *nonroot_leader = ""; const char *nonroot_trailer = ""; + const char *idstr = ""; id = new_id; if (flag == CTF_ADD_NONROOT) @@ -110,15 +116,18 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) { if (id == 0 || ctf_errno (fp) == ECTF_NONREPRESENTABLE) { + ctf_set_errno (fp, ECTF_NONREPRESENTABLE); str = str_append (str, " (type not represented in CTF)"); - ctf_set_errno (fp, ECTF_NOTREF); - break; + return str; } goto err; } - if (asprintf (&bit, " %s0x%lx: ", nonroot_leader, id) < 0) + if (flag & CTF_FT_ID) + idstr = "ID "; + if (asprintf (&bit, "%s%s0x%lx: (kind %i) ", nonroot_leader, idstr, + id, ctf_type_kind (fp, id)) < 0) goto oom; str = str_append (str, bit); free (bit); @@ -129,37 +138,74 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) free (buf); buf = NULL; + unsliced_kind = ctf_type_kind_unsliced (fp, id); kind = ctf_type_kind (fp, id); - /* Slices get a different print representation. */ - if (unsliced_kind == CTF_K_SLICE) + if (ctf_type_encoding (fp, id, &ep) == 0) { - ctf_type_encoding (fp, id, &enc); - if (asprintf (&bit, " [slice 0x%x:0x%x]", - enc.cte_offset, enc.cte_bits) < 0) + if (ep.cte_bits != ctf_type_size (fp, id) * CHAR_BIT + && flag & CTF_FT_BITFIELD) + { + if (asprintf (&bit, ":%i", ep.cte_bits) < 0) + goto oom; + str = str_append (str, bit); + free (bit); + bit = NULL; + } + + if (ep.cte_bits != ctf_type_size (fp, id) * CHAR_BIT + || ep.cte_offset != 0) + { + const char *slice = ""; + + if (unsliced_kind == CTF_K_SLICE) + slice = "slice "; + + if (asprintf (&bit, " [%s0x%x:0x%x]", + slice, ep.cte_offset, ep.cte_bits) < 0) + goto oom; + str = str_append (str, bit); + free (bit); + bit = NULL; + } + + if (asprintf (&bit, " (format 0x%x)", ep.cte_format) < 0) goto oom; + str = str_append (str, bit); + free (bit); + bit = NULL; } - else if (kind == CTF_K_INTEGER) + + if (kind != CTF_K_FUNCTION && kind != CTF_K_FORWARD) { - ctf_type_encoding (fp, id, &enc); - if (asprintf (&bit, " [0x%x:0x%x]", - enc.cte_offset, enc.cte_bits) < 0) + if (asprintf (&bit, " (size 0x%lx)", + (unsigned long) ctf_type_size (fp, id)) < 0) goto oom; + + str = str_append (str, bit); + free (bit); + bit = NULL; } - str = str_append (str, bit); - free (bit); - bit = NULL; - if (kind != CTF_K_FUNCTION && kind != CTF_K_FORWARD) - if (asprintf (&bit, " (size 0x%lx)%s", - (unsigned long) ctf_type_size (fp, id), - nonroot_trailer) < 0) - goto oom; + if (kind != CTF_K_FORWARD) + { + if (asprintf (&bit, " (aligned at 0x%lx)", + (unsigned long) ctf_type_align (fp, id)) < 0) + goto oom; - str = str_append (str, bit); - free (bit); - bit = NULL; + str = str_append (str, bit); + free (bit); + bit = NULL; + } + + if (nonroot_trailer[0] != 0) + str = str_append (str, nonroot_trailer); + + /* Just exit after one iteration if we are not showing the types this type + references. */ + if (!(flag & CTF_FT_REFS)) + return str; /* Keep going as long as this type references another. We consider arrays to "reference" their element type. */ @@ -173,7 +219,7 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) else new_id = ctf_type_reference (fp, id); if (new_id != CTF_ERR) - str = str_append (str, " ->"); + str = str_append (str, " -> "); } while (new_id != CTF_ERR); if (ctf_errno (fp) != ECTF_NOTREF) @@ -363,7 +409,7 @@ ctf_dump_label (const char *name, const ctf_lblinfo_t *info, return (ctf_set_errno (state->cds_fp, errno)); if ((typestr = ctf_dump_format_type (state->cds_fp, info->ctb_type, - CTF_ADD_ROOT)) == NULL) + CTF_ADD_ROOT | CTF_FT_REFS)) == NULL) { free (str); return 0; /* Swallow the error. */ @@ -400,14 +446,14 @@ ctf_dump_objts (ctf_dict_t *fp, ctf_dump_state_t *state, int functions) has a leading one. */ if (name) { - if (asprintf (&str, "%s ->", name) < 0) + if (asprintf (&str, "%s -> ", name) < 0) goto oom; } else str = xstrdup (""); if ((typestr = ctf_dump_format_type (state->cds_fp, id, - CTF_ADD_ROOT)) == NULL) + CTF_ADD_ROOT | CTF_FT_REFS)) == NULL) { ctf_dump_append (state, str); continue; /* Swallow the error. */ @@ -438,7 +484,7 @@ ctf_dump_var (const char *name, ctf_id_t type, void *arg) return (ctf_set_errno (state->cds_fp, errno)); if ((typestr = ctf_dump_format_type (state->cds_fp, type, - CTF_ADD_ROOT)) == NULL) + CTF_ADD_ROOT | CTF_FT_REFS)) == NULL) { free (str); return 0; /* Swallow the error. */ @@ -451,22 +497,7 @@ ctf_dump_var (const char *name, ctf_id_t type, void *arg) return 0; } -/* Report the number of digits in the hexadecimal representation of a type - ID. */ - -static int -type_hex_digits (ctf_id_t id) -{ - int i = 0; - - if (id == 0) - return 1; - - for (; id > 0; id >>= 4, i++); - return i; -} - -/* Dump a single member into the string in the membstate. */ +/* Dump a single struct/union member into the string in the membstate. */ static int ctf_dump_member (const char *name, ctf_id_t id, unsigned long offset, int depth, void *arg) @@ -474,72 +505,23 @@ ctf_dump_member (const char *name, ctf_id_t id, unsigned long offset, ctf_dump_membstate_t *state = arg; char *typestr = NULL; char *bit = NULL; - ctf_encoding_t ep; - int has_encoding = 0; - int opened_paren = 0; - - /* Align neatly. */ + /* The struct/union itself has already been printed. */ if (depth == 0) - { - if (asprintf (&state->cdm_toplevel_indent, " %*s", - type_hex_digits (id), "") < 0) - goto oom; - } + return 0; - if (asprintf (&bit, "%s%*s", state->cdm_toplevel_indent, depth * 4, "") < 0) + if (asprintf (&bit, "%s%*s", state->cdm_toplevel_indent, (depth-1)*4, "") < 0) goto oom; *state->cdm_str = str_append (*state->cdm_str, bit); free (bit); - if ((typestr = ctf_type_aname (state->cdm_fp, id)) == NULL) - { - if (id == 0 || ctf_errno (state->cdm_fp) == ECTF_NONREPRESENTABLE) - { - if (asprintf (&bit, "[0x%lx] (type not represented in CTF)", - offset) < 0) - goto oom; - - *state->cdm_str = str_append (*state->cdm_str, bit); - free (typestr); - free (bit); - return 0; - } + if ((typestr = ctf_dump_format_type (state->cdm_fp, id, + CTF_ADD_ROOT | CTF_FT_BITFIELD + | CTF_FT_ID)) == NULL) + return -1; /* errno is set for us. */ - return -1; /* errno is set for us. */ - } - - if (ctf_type_encoding (state->cdm_fp, id, &ep) == 0) - { - has_encoding = 1; - ctf_type_encoding (state->cdm_fp, id, &ep); - - if (asprintf (&bit, "[0x%lx] (ID 0x%lx) (kind %i) %s%s%s:%i " - "(aligned at 0x%lx", offset, id, - ctf_type_kind (state->cdm_fp, id), typestr, - (name[0] != 0 && typestr[0] != 0) ? " " : "", name, - ep.cte_bits, (unsigned long) ctf_type_align (state->cdm_fp, - id)) < 0) - goto oom; - opened_paren = 1; - } - else if (ctf_type_kind (state->cdm_fp, id) != CTF_K_FORWARD) - { - if (asprintf (&bit, "[0x%lx] (ID 0x%lx) (kind %i) %s%s%s " - "(aligned at 0x%lx", offset, id, - ctf_type_kind (state->cdm_fp, id), typestr, - (name[0] != 0 && typestr[0] != 0) ? " " : "", name, - (unsigned long) ctf_type_align (state->cdm_fp, id)) < 0) - goto oom; - opened_paren = 1; - } - else /* Forwards have no alignment. */ - { - if (asprintf (&bit, "[0x%lx] (ID 0x%lx) (kind %i) %s%s%s\n", offset, id, - ctf_type_kind (state->cdm_fp, id), typestr, - (name[0] != 0 && typestr[0] != 0) ? " " : "", name) < 0) - goto oom; - } + if (asprintf (&bit, "[0x%lx] %s: %s\n", offset, name, typestr) < 0) + goto oom; *state->cdm_str = str_append (*state->cdm_str, bit); free (typestr); @@ -547,18 +529,6 @@ ctf_dump_member (const char *name, ctf_id_t id, unsigned long offset, typestr = NULL; bit = NULL; - if (has_encoding) - { - if (asprintf (&bit, ", format 0x%x, offset:bits 0x%x:0x%x", ep.cte_format, - ep.cte_offset, ep.cte_bits) < 0) - goto oom; - *state->cdm_str = str_append (*state->cdm_str, bit); - free (bit); - bit = NULL; - } - - if (opened_paren) - *state->cdm_str = str_append (*state->cdm_str, ")\n"); return 0; oom: @@ -567,44 +537,112 @@ ctf_dump_member (const char *name, ctf_id_t id, unsigned long offset, return (ctf_set_errno (state->cdm_fp, errno)); } +/* Report the number of digits in the hexadecimal representation of a type + ID. */ + +static int +type_hex_digits (ctf_id_t id) +{ + int i = 0; + + if (id == 0) + return 1; + + for (; id > 0; id >>= 4, i++); + return i; +} + /* Dump a single type into the cds_items. */ static int ctf_dump_type (ctf_id_t id, int flag, void *arg) { char *str; + char *indent; + int err = 0; ctf_dump_state_t *state = arg; ctf_dump_membstate_t membstate = { &str, state->cds_fp, NULL }; - size_t len; - if ((str = ctf_dump_format_type (state->cds_fp, id, flag)) == NULL) - goto err; + /* Indent neatly. */ + if (asprintf (&indent, " %*s", type_hex_digits (id), "") < 0) + return (ctf_set_errno (state->cds_fp, ENOMEM)); + /* Dump the type itself. */ + if ((str = ctf_dump_format_type (state->cds_fp, id, + flag | CTF_FT_REFS)) == NULL) + goto err; str = str_append (str, "\n"); - if ((ctf_type_visit (state->cds_fp, id, ctf_dump_member, &membstate)) < 0) + + membstate.cdm_toplevel_indent = indent; + + /* Member dumping for structs, unions... */ + if (ctf_type_kind (state->cds_fp, id) == CTF_K_STRUCT + || ctf_type_kind (state->cds_fp, id) == CTF_K_UNION) { - if (id == 0 || ctf_errno (state->cds_fp) == ECTF_NONREPRESENTABLE) + if ((ctf_type_visit (state->cds_fp, id, ctf_dump_member, &membstate)) < 0) { - ctf_dump_append (state, str); - return 0; + if (id == 0 || ctf_errno (state->cds_fp) == ECTF_NONREPRESENTABLE) + { + ctf_dump_append (state, str); + return 0; + } + ctf_err_warn (state->cds_fp, 1, ctf_errno (state->cds_fp), + _("cannot visit members dumping type 0x%lx"), id); + goto err; } - ctf_err_warn (state->cds_fp, 1, ctf_errno (state->cds_fp), - _("cannot visit members dumping type 0x%lx"), id); - goto err; } - free (membstate.cdm_toplevel_indent); - /* Trim off the last linefeed added by ctf_dump_member(). */ - len = strlen (str); - if (str[len-1] == '\n') - str[len-1] = '\0'; + /* ... and enums, for which we dump the first and last few members and skip + the ones in the middle. */ + if (ctf_type_kind (state->cds_fp, id) == CTF_K_ENUM) + { + int enum_count = ctf_member_count (state->cds_fp, id); + ctf_next_t *it = NULL; + int i = 0; + const char *enumerand; + char *bit; + int value; + + while ((enumerand = ctf_enum_next (state->cds_fp, id, + &it, &value)) != NULL) + { + i++; + if ((i > 5) && (i < enum_count - 4)) + continue; + + str = str_append (str, indent); + + if (asprintf (&bit, "%s: %i\n", enumerand, value) < 0) + { + err = ENOMEM; + ctf_next_destroy (it); + goto err; + } + str = str_append (str, bit); + free (bit); + + if ((i == 5) && (enum_count > 10)) + { + str = str_append (str, indent); + str = str_append (str, "...\n"); + } + } + if (ctf_errno (state->cds_fp) != ECTF_NEXT_END) + { + ctf_err_warn (state->cds_fp, 1, ctf_errno (state->cds_fp), + _("cannot visit enumerands dumping type 0x%lx"), id); + goto err; + } + } ctf_dump_append (state, str); + free (indent); + return 0; err: - free (membstate.cdm_toplevel_indent); + free (indent); free (str); - return 0; /* Swallow the error. */ + return ctf_set_errno (state->cds_fp, err); } /* Dump the string table into the cds_items. */ diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index 3ba635f..a3d824b 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -826,10 +826,6 @@ ctf_type_aname (ctf_dict_t *fp, ctf_id_t type) case CTF_K_RESTRICT: ctf_decl_sprintf (&cd, "restrict"); break; - case CTF_K_SLICE: - /* No representation: just changes encoding of contained type, - which is not in any case printed. Skip it. */ - break; } k = cdp->cd_kind; |