aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog34
-rw-r--r--ld/testsuite/ld-ctf/array.d8
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-1.B-1.d7
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-1.B-2.d9
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-1.parent.d3
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-2.A-1.d7
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-2.A-2.d9
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-2.parent.d11
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-3.C-1.d7
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-3.C-2.d9
-rw-r--r--ld/testsuite/ld-ctf/conflicting-cycle-3.parent.d3
-rw-r--r--ld/testsuite/ld-ctf/conflicting-enums.d20
-rw-r--r--ld/testsuite/ld-ctf/conflicting-typedefs.d12
-rw-r--r--ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d31
-rw-r--r--ld/testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d26
-rw-r--r--ld/testsuite/ld-ctf/cross-tu-into-cycle.d22
-rw-r--r--ld/testsuite/ld-ctf/cross-tu-noncyclic.d18
-rw-r--r--ld/testsuite/ld-ctf/cycle-1.d9
-rw-r--r--ld/testsuite/ld-ctf/cycle-2.A.d7
-rw-r--r--ld/testsuite/ld-ctf/cycle-2.B.d7
-rw-r--r--ld/testsuite/ld-ctf/cycle-2.C.d7
-rw-r--r--ld/testsuite/ld-ctf/data-func-conflicted.d27
-rw-r--r--ld/testsuite/ld-ctf/diag-cttname-null.d7
-rw-r--r--ld/testsuite/ld-ctf/diag-cuname.d7
-rw-r--r--ld/testsuite/ld-ctf/diag-parlabel.d7
-rw-r--r--ld/testsuite/ld-ctf/diag-wrong-magic-number-mixed.d6
-rw-r--r--ld/testsuite/ld-ctf/enums.c3
-rw-r--r--ld/testsuite/ld-ctf/enums.d54
-rw-r--r--ld/testsuite/ld-ctf/forward.d6
-rw-r--r--ld/testsuite/ld-ctf/function.d5
-rw-r--r--ld/testsuite/ld-ctf/slice.d14
-rw-r--r--ld/testsuite/ld-ctf/super-sub-cycles.d27
-rw-r--r--libctf/ChangeLog23
-rw-r--r--libctf/ctf-decl.c5
-rw-r--r--libctf/ctf-dump.c308
-rw-r--r--libctf/ctf-types.c4
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;