Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[TEST CASE] String offset errors on evbarm 8.99 [PR 54159]

Description: the linker complains about string offsets in .strtab that
are pass the end of the section. This can be seen equally with a
cross-linker or a native linker on earmv7hf.

How to reproduce: this is triggered by the use of the:

	-Wl,-retain-symbols-file -Wl,./some_exported_list

This can be tested with dummy modules (the script joined allows to
create a variable number of modules---the "from" and "to" decimal
numbers of first and last letter---with an alphabetical letter as
name, and as the name of a function inside the dummy; by default, it
creates 'a' to 'd' C files; it suffices to exhibit the problems).

Scope: it seemed to be only a debug problem at first since the .strtab
section is only used in this case. But it could trigger more profound
problems if a symbol is 'a' or 'd' conflicting with "$a" and "$d". In
some cases (this is not constant), even 'c' disappears.

First analysis: when a symbol is named 'a' or 'd', even if explicitely
exported, it never appears in the .strtab; but '$a' and '$d' are
always there.

In the export table, except (always) symbols named 'a' or 'd' (that
never appear), the only strings are '$a', '$d' and the strings present
in the exported_list given as an argument to the "-retain-symbols-file".

But some strings that are still associated with some symbols are not
present and these are the ones the linker complains about.

In the simplest case, the addition of '$d' can mask the symptoms (no
more complaints of the linker) because some missing strings are the
c source file names ($module.c) and some functions present in the crt*
modules, and these are associated with '$d'. But in pkgsrc
security/p11-kit, when more libraries are linked against the library
created, some strings are still missing (for the linker) even when
adding '$d' to the exported list.

What's next? I will have some spare time next week and will tackle
the problem on the ld source level. But I have only the knowledge given
by John R. Levine's "Linkers & Loaders" book, and I have never dived in
the binutils sources. So if this rings a bell to someone more
knowledgeable who can tackle the problem himself...

At the very least, I would like to be pointed to some
documentation, particularily about what are these special symbols '$a'
'$d' (and '$t' and what else?) and what is special about the earmv7

        Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C

Home | Main Index | Thread Index | Old Index