forked from Imagelibrary/binutils-gdb
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:
19
ld/testsuite/ld-ctf/unshared-strings-A.c
Normal file
19
ld/testsuite/ld-ctf/unshared-strings-A.c
Normal 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));
|
||||
|
||||
21
ld/testsuite/ld-ctf/unshared-strings-B.c
Normal file
21
ld/testsuite/ld-ctf/unshared-strings-B.c
Normal 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));
|
||||
|
||||
45
ld/testsuite/ld-ctf/unshared-strings.d
Normal file
45
ld/testsuite/ld-ctf/unshared-strings.d
Normal 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
|
||||
Reference in New Issue
Block a user