From acf3236e6bae45568cdad7efb8ec8cfa8aa302df Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Tue, 16 Jul 2024 13:01:36 +0100 Subject: [PATCH] libctf: a little string sharing test 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 | 19 ++++++++++ ld/testsuite/ld-ctf/unshared-strings-B.c | 21 +++++++++++ ld/testsuite/ld-ctf/unshared-strings.d | 45 ++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 ld/testsuite/ld-ctf/unshared-strings-A.c create mode 100644 ld/testsuite/ld-ctf/unshared-strings-B.c create mode 100644 ld/testsuite/ld-ctf/unshared-strings.d diff --git a/ld/testsuite/ld-ctf/unshared-strings-A.c b/ld/testsuite/ld-ctf/unshared-strings-A.c new file mode 100644 index 00000000000..690f129d98a --- /dev/null +++ b/ld/testsuite/ld-ctf/unshared-strings-A.c @@ -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 index 00000000000..51796cc4876 --- /dev/null +++ b/ld/testsuite/ld-ctf/unshared-strings-B.c @@ -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 index 00000000000..32bed2966d4 --- /dev/null +++ b/ld/testsuite/ld-ctf/unshared-strings.d @@ -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 -- 2.47.2