]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
libctf: a little string sharing test
authorNick Alcock <nick.alcock@oracle.com>
Tue, 16 Jul 2024 12:01:36 +0000 (13:01 +0100)
committerNick Alcock <nick.alcock@oracle.com>
Fri, 28 Feb 2025 14:47:24 +0000 (14:47 +0000)
It's actually quite hard to come up with simple tests that do *not* share
all their strings, but with enough ingenuity suitable cycles can be
concocted.

This test verifies that only and precisely those strings that are only used
in one child dict actually end up in its strtab.

ld/
* testsuite/ld-ctf/unshared-strings*: New test.

ld/testsuite/ld-ctf/unshared-strings-A.c [new file with mode: 0644]
ld/testsuite/ld-ctf/unshared-strings-B.c [new file with mode: 0644]
ld/testsuite/ld-ctf/unshared-strings.d [new file with mode: 0644]

diff --git a/ld/testsuite/ld-ctf/unshared-strings-A.c b/ld/testsuite/ld-ctf/unshared-strings-A.c
new file mode 100644 (file)
index 0000000..690f129
--- /dev/null
@@ -0,0 +1,19 @@
+struct A;
+struct B
+{
+  int foo;
+  struct A *a;
+};
+struct C;
+typedef struct C aaa;
+struct A
+{
+  aaa *wurblefrotz;
+};
+struct C
+{
+  struct B *foo;
+};
+
+static struct A *foo __attribute__((used));
+
diff --git a/ld/testsuite/ld-ctf/unshared-strings-B.c b/ld/testsuite/ld-ctf/unshared-strings-B.c
new file mode 100644 (file)
index 0000000..51796cc
--- /dev/null
@@ -0,0 +1,21 @@
+struct A;
+struct B
+{
+  int foo;
+  struct A *a;
+};
+struct C;
+typedef struct C C1;
+typedef C1 C2;
+struct A
+{
+  C2 *wurblefritz;
+};
+
+struct C
+{
+  struct B *foo;
+};
+
+static struct A *foo __attribute__((used));
+
diff --git a/ld/testsuite/ld-ctf/unshared-strings.d b/ld/testsuite/ld-ctf/unshared-strings.d
new file mode 100644 (file)
index 0000000..32bed29
--- /dev/null
@@ -0,0 +1,45 @@
+#as:
+#source: unshared-strings-A.c
+#source: unshared-strings-B.c
+#objdump: --ctf
+#ld: -shared
+#name: Verify proper sharing (and non-sharing) of strings
+
+.*: +file format .*
+
+Contents of CTF section .ctf:
+
+  Header:
+    Magic number: 0xdff2
+    Version: 5 \(CTF_VERSION_4\)
+#...
+  Strings:
+    0x0: 
+    0x[0-9a-f]*: A
+#...
+    0x[0-9a-f]*: C1
+    0x[0-9a-f]*: C2
+#...
+    0x[0-9a-f]*: aaa
+#...
+CTF archive member: .*/unshared-strings-A.c:
+#...
+  Types:
+    0x[0-9a-f]*: \(kind 6\) struct A .*
+                \[0x0\] wurblefrotz: ID .*
+
+  Strings:
+    0x0: .ctf
+#...
+    0x[0-9a-f]*: wurblefrotz
+
+CTF archive member: .*/unshared-strings-B.c:
+#...
+  Types:
+    0x[0-9a-f]*: \(kind 6\) struct A .*
+                \[0x0\] wurblefritz: ID .*
+
+  Strings:
+    0x0: .ctf
+#...
+    0x[0-9a-f]*: wurblefritz