The following example creates a support library that prints the section name (see Table 7-16) of any relocatable object file processed as part of a link-edit.
$ cat support.c
#include <link.h>
static int indent = 0;
void
ld_start(const char * name, const Elf32_Half type,
const char * caller)
{
(void) printf("output image: %s\n", name);
}
void
ld_file(const char * name, const Elf_Kind kind, int flags,
Elf * elf)
{
if (flags & LD_SUP_EXTRACTED)
indent = 4;
else
indent = 2;
(void) printf("%*sfile: %s\n", indent, "", name);
}
void
ld_section(const char * name, Elf32_Shdr * shdr, Elf32_Word sndx,
Elf_Data * data, Elf * elf)
{
Elf32_Ehdr * ehdr = elf32_getehdr(elf);
if (ehdr->e_type == ET_REL)
(void) printf("%*s section [%ld]: %s\n", indent,
"", sndx, name);
}
|
This support library is dependent upon libelf to provide the ELF access function elf32_getehdr(3E) used to determine the input file type. The support library is built using:
$ cc -o support.so.1 -G -K pic support.c -lelf -lc |
The following example shows the section diagnostics resulting from the construction of a trivial application from a relocatable object and a local archive library. The invocation of the support library, in addition to default debugging information processing, is brought about by the -S option usage:
$ LD_OPTIONS=-S./support.so.1:libldstab.so.1 cc -o prog \
main.c -L. -lfoo
output image: prog
file: /opt/COMPILER/crti.o
section [1]: .shstrtab
section [2]: .text
.......
file: /opt/COMPILER/crt1.o
section [1]: .shstrtab
section [2]: .text
.......
file: /opt/COMPILER/values-xt.o
section [1]: .shstrtab
section [2]: .text
.......
file: main.o
section [1]: .shstrtab
section [2]: .text
.......
file: ./libfoo.a
file: ./libfoo.a(foo.o)
section [1]: .shstrtab
section [2]: .text
.......
file: /usr/lib/libc.so
file: /opt/COMPILER/crtn.o
section [1]: .shstrtab
section [2]: .text
.......
file: /usr/lib/libdl.so.1
|
The number of sections displayed in this example have been reduced to simplify the output. Also, the files included by the compiler driver can vary.