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.
This commit is contained in:
Nick Alcock
2024-07-16 13:01:36 +01:00
parent 4d2d5afa60
commit acf3236e6b
3 changed files with 85 additions and 0 deletions

View File

@@ -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));

View File

@@ -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));

View File

@@ -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