Symbol Table

An object file's symbol table holds information needed to locate and relocate a program's symbolic definitions and references. A symbol table index is a subscript into this array. Index 0 both designates the first entry in the table and serves as the undefined symbol index. The contents of the initial entry are specified later in this section.

Name Value
STN_UNDEF 0

A symbol table entry has the following format.


Figure 4-15: Symbol Table Entry


typedef struct {
       Elf32_Word      st_name;
       Elf32_Addr      st_value;
       Elf32_Word      st_size;
       unsigned char   st_info;
       unsigned char   st_other;
       Elf32_Half      st_shndx;
} Elf32_Sym;

typedef struct {
       Elf64_Word      st_name;
       unsigned char   st_info;
       unsigned char   st_other;
       Elf64_Half      st_shndx;
       Elf64_Addr      st_value;
       Elf64_Xword     st_size;
} Elf64_Sym;

st_name
This member holds an index into the object file's symbol string table, which holds the character representations of the symbol names. If the value is non-zero, it represents a string table index that gives the symbol name. Otherwise, the symbol table entry has no name.

NOTE: External C symbols have the same names in C and object files' symbol tables.

st_value
This member gives the value of the associated symbol. Depending on the context, this may be an absolute value, an address, and so on; details appear below.

st_size
Many symbols have associated sizes. For example, a data object's size is the number of bytes contained in the object. This member holds 0 if the symbol has no size or an unknown size.

st_info
This member specifies the symbol's type and binding attributes. A list of the values and meanings appears below. The following code shows how to manipulate the values for both 32 and 64-bit objects.
   #define ELF32_ST_BIND(i)   ((i)>>4)
   #define ELF32_ST_TYPE(i)   ((i)&0xf)
   #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))

   #define ELF64_ST_BIND(i)   ((i)>>4)
   #define ELF64_ST_TYPE(i)   ((i)&0xf)
   #define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))

st_other
This member currently holds 0 and has no defined meaning.

st_shndx
Every symbol table entry is defined in relation to some section. This member holds the relevant section header table index. As the sh_link and sh_info interpretation table and the related text describe, some section indexes indicate special meanings.

A symbol's binding determines the linkage visibility and behavior.


Figure 4-16: Symbol Binding

Name Value
STB_LOCAL 0
STB_GLOBAL 1
STB_WEAK 2
STB_LOOS 10
STB_HIOS 12
STB_LOPROC 13
STB_HIPROC 15


STB_LOCAL
Local symbols are not visible outside the object file containing their definition. Local symbols of the same name may exist in multiple files without interfering with each other.

STB_GLOBAL
Global symbols are visible to all object files being combined. One file's definition of a global symbol will satisfy another file's undefined reference to the same global symbol.

STB_WEAK
Weak symbols resemble global symbols, but their definitions have lower precedence.

STB_LOOS through STB_HIOS
Values in this inclusive range are reserved for operating system-specific semantics.

STB_LOPROC through STB_HIPROC
Values in this inclusive range are reserved for processor-specific semantics. If meanings are specified, the processor supplement explains them.

Global and weak symbols differ in two major ways.

In each symbol table, all symbols with STB_LOCAL binding precede the weak and global symbols. As ``Sections'', above describes, a symbol table section's sh_info section header member holds the symbol table index for the first non-local symbol.

A symbol's type provides a general classification for the associated entity.


Figure 4-17: Symbol Types

Name Value
STT_NOTYPE 0
STT_OBJECT 1
STT_FUNC 2
STT_SECTION 3
STT_FILE 4
STT_LOOS 10
STT_HIOS 12
STT_LOPROC 13
STT_HIPROC 15


STT_NOTYPE
The symbol's type is not specified.

STT_OBJECT
The symbol is associated with a data object, such as a variable, an array, and so on.

STT_FUNC
The symbol is associated with a function or other executable code.

STT_SECTION
The symbol is associated with a section. Symbol table entries of this type exist primarily for relocation and normally have STB_LOCAL binding.

STT_FILE
Conventionally, the symbol's name gives the name of the source file associated with the object file. A file symbol has STB_LOCAL binding, its section index is SHN_ABS, and it precedes the other STB_LOCAL symbols for the file, if it is present.

STT_LOOS through STT_HIOS
Values in this inclusive range are reserved for operating system-specific semantics.

STT_LOPROC through STT_HIPROC
Values in this inclusive range are reserved for processor-specific semantics. If meanings are specified, the processor supplement explains them.

Function symbols (those with type STT_FUNC) in shared object files have special significance. When another object file references a function from a shared object, the link editor automatically creates a procedure linkage table entry for the referenced symbol. Shared object symbols with types other than STT_FUNC will not be referenced automatically through the procedure linkage table.

If a symbol's value refers to a specific location within a section, its section index member, st_shndx, holds an index into the section header table. As the section moves during relocation, the symbol's value changes as well, and references to the symbol continue to ``point'' to the same location in the program. Some special section index values give other semantics.

SHN_ABS
The symbol has an absolute value that will not change because of relocation.

SHN_COMMON
The symbol labels a common block that has not yet been allocated. The symbol's value gives alignment constraints, similar to a section's sh_addralign member. The link editor will allocate the storage for the symbol at an address that is a multiple of st_value. The symbol's size tells how many bytes are required.

SHN_UNDEF
This section table index means the symbol is undefined. When the link editor combines this object file with another that defines the indicated symbol, this file's references to the symbol will be linked to the actual definition.

The symbol table entry for index 0 (STN_UNDEF) is reserved; it holds the following.


Figure 4-18: Symbol Table Entry:Index 0

Name Value Note
st_name 0 No name
st_value 0 Zero value
st_size 0 No size
st_info 0 No type, local binding
st_other 0  
st_shndx SHN_UNDEF No section


Symbol Values

Symbol table entries for different object file types have slightly different interpretations for the st_value member. Although the symbol table values have similar meanings for different object files, the data allows efficient access by the appropriate programs.
Previous Contents Next
© 1997, 1998 The Santa Cruz Operation, Inc. All rights reserved.