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.
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
External C symbols have the same names in C
and object files' symbol tables.
st_valuest_sizest_info#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_otherst_shndxsh_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.
| Name | Value |
|---|---|
STB_LOCAL |
0 |
STB_GLOBAL |
1 |
STB_WEAK |
2 |
STB_LOOS |
10 |
STB_HIOS |
12 |
STB_LOPROC |
13 |
STB_HIPROC |
15 |
STB_LOCALSTB_GLOBALSTB_WEAKSTB_LOOS through STB_HIOSSTB_LOPROC through STB_HIPROCGlobal and weak symbols differ in two major ways.
STB_GLOBAL
symbols with the same name.
On the other hand, if a defined global symbol exists,
the appearance of a weak symbol with the same name
will not cause an error.
The link editor honors the global definition and ignores
the weak ones.
Similarly, if a common symbol exists
(that is, a symbol whose st_shndx
field holds SHN_COMMON),
the appearance of a weak symbol with the same name will
not cause an error.
The link editor honors the common definition and
ignores the weak ones.
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.
| 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_NOTYPESTT_OBJECTSTT_FUNCSTT_SECTIONSTB_LOCAL binding.
STT_FILESTB_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_HIOSSTT_LOPROC through STT_HIPROC
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_ABSSHN_COMMONsh_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
The symbol table entry for index 0 (STN_UNDEF)
is reserved; it holds the following.
| 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 |
st_value member.
st_value holds alignment constraints for a symbol
whose section index is SHN_COMMON.
st_value holds
a section offset for a defined symbol.
st_value is an offset from the beginning of the section that
st_shndx identifies.
st_value holds a virtual address.
To make these files' symbols more useful
for the dynamic linker, the section offset (file interpretation)
gives way to a virtual address (memory interpretation)
for which the section number is irrelevant.