+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
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:
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 .*
#...
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:
#...
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:
#...
#...
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: .*:
#...
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:
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:
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]*\)
#...
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:
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:
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:
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:
#...
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:
#...
#...
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:
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:
#...
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:
#...
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:
#...
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:
#...
Function objects:
Variables:
- conflicty -> .*
+ conflicty -> .*
Types:
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 .*
#...
#...
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 \* \(.*
#...
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:
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:
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:
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:
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 .*
#...
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 \* \(.*
#...
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:
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:
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:
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:
#...
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:
--- /dev/null
+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;
--- /dev/null
+#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
+
+#...
#...
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
#...
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]*\)
#...
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\)
+
#...
#...
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 \* \(.*
#...
+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.
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:
{
char **cdm_str;
ctf_dict_t *cdm_fp;
- char *cdm_toplevel_indent;
+ const char *cdm_toplevel_indent;
} ctf_dump_membstate_t;
static int
}
}
-/* 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)
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)
{
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);
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. */
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)
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. */
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. */
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. */
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)
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);
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:
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. */
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;