Linker and Libraries Guide

Support Interface Functions

All ld-support interfaces are defined in the header file link.h. All interface arguments are basic C types or ELF types. The ELF data types can be examined with the ELF access library libelf (see elf(3ELF) for a description of libelf contents). The following interface functions are provided by the ld-support interface, and are described in their expected order of use:

ld_start()

void ld_start(const char * name, const Elf32_Half type,
    const char * caller);

void ld_start64(const char * name, const Elf64_Half type,
    const char * caller);

This function is called after initial validation of the link-editor command line, and indicates the start of input file processing.

name is the output filename being created. type is the output file type, which is either ET_DYN, ET_REL, or ET_EXEC (as defined in sys/elf.h). caller is the application calling the interface, which is normally /usr/ccs/bin/ld.

ld_file()

void ld_file(const char * name, const Elf_Kind kind, int flags,
    Elf * elf);

void ld_file64(const char * name, const Elf_Kind kind, int flags,
    Elf * elf);

This function is called for each input file before any processing of the files data is carried out.

name is the input file about to be processed. kind indicates the input file type, which is either ELF_K_AR, or ELF_K_ELF (as defined in libelf.h). flags indicates how the link-editor obtained the file, and can be one or more of the following definitions:

  • LD_SUP_DERIVED -- The filename was not explicitly named on the command-line. It was either derived from a -l expansion, or it identifies an extracted archive member.

  • LD_SUP_INHERITED -- The file was obtained as a dependency of a command-line shared object.

  • LD_SUP_EXTRACTED -- The file was extracted from an archive.

If no flags values are specified then the input file has been explicitly named on the command-line. elf is a pointer to the files ELF descriptor.

ld_section()

void ld_section(const char * name, Elf32_Shdr * shdr, Elf32_Word sndx,
        Elf_Data * data, Elf * elf);

void ld_section64(const char * name, Elf64_Shdr * shdr, Elf64_Word sndx,
        Elf_Data * data, Elf * elf);

This function is called for each section of the input file before any processing of the section data is carried out.

name is the input section name. shdr is a pointer to the associated section header. sndx is the section index within the input file. data is a pointer to the associated data buffer. elf is a pointer to the files ELF descriptor.

Modification of the data is permitted by reallocating the data itself and reassigning the Elf_Data buffer's d_buf pointer. Any modification to the data should ensure the correct setting of the Elf_Data buffers d_size element. For input sections that will become part of the output image, setting the d_size element to zero will effectively remove the data from the output image.


Note -

Any sections that are stripped by use of the link-editor's -s option, or discarded due to SHT_SUNW_COMDAT processing (see "Comdat Section") are not reported to ld_section().


ld_atexit()

void ld_atexit(int status);

void ld_atexit64(int status);

This function is called on completion of the link-edit.

status is the exit(2) code that will be returned by the link-editor and is either EXIT_FAILURE or EXIT_SUCCESS (as defined in stdlib.h).