eld Manual
Table Of Contents
- eld Manual
- Legal Notices
- Contents
- What’s New in This Manual
- Manual Information
- New and Changed Information
- About This Manual
- Notation Conventions
- 1 Introduction to eld
- 2 eld Input and Output
- 3 Binding of References
- Overview
- Presetting Loadfiles
- To Preset or Not to Preset, and Creation of the LIC
- Handling Unresolved References
- Using User Libraries
- Creating Import Libraries
- Ignoring Optional Libraries
- Merging Symbols Found in Input Linkfiles
- Accepting Multiply-Defined Symbols
- Using the -cross_dll_cleanup option
- Specifying Which Symbols to Export, and Creating the Export Digest
- Public Libraries and DLLs
- The Public Library Registry
- 4 Other eld Processing
- Adjusting Loadfiles: The -alf Option
- Additional rules about -alf
- The -set and -change Options
- eld Functionality for 64-Bit
- Checking the C++ Language Dialect
- Renaming Symbols
- Creating Linker-Defined Symbols
- Updating Or Stripping DWARF Symbol Table Information
- Modifying the Data Sections that Contain Stack Unwinding Information
- Creating the MCB
- Processing of Floating Point Versions and Data Models
- Specification of the Main Entry Point
- Specifying Runtime Search Path Information for DLLs
- Merging Source RTDUs
- 5 Summary of Linker Options
- 6 Output Listings and Error Handling
- A TNS/E Native Object Files
- Glossary
- Index
TNS/E Native Object Files
eld Manual—527255-009
A-23
Relocation Tables
In both cases, if the IP-relative branch was a 21-bit variety, it might not be possible for
it to reach its destination. In such a case the linker would allocate a branch stub that
was close enough. The branch stub would use a code sequence that enabled it to
reach the target procedure or import stub, and the original instruction would be
updated to reach the branch stub.
R_IA_64_LTOFF_FPTR22 --
22-Bit GP-Relative Address of the .got Section Entry for an Official Function Descriptor.
This applies to the situation when code assigns a value to a procedure pointer. The
compiler or assembler generates code that adds a signed 22-bit offset to the GP
register in order to get the address of an entry in the .got section, which contains the
address of the official function descriptor. The linker would allocate the .got entry and
fill in the 22-bit operand by subtracting the value of the GP register for this loadfile from
the address of that .got entry. This relocation table entry is not present in loadfiles.
The linker would instead generate a relocation table entry of type
R_IA_64_FPTR64MSB to describe the .got entry.
R_IA_64_SEGREL64MSB -- Segment-Relative Address
This indicates a value that is an offset from the start of the same segment of the same
loadfile.
This is the relocation type that is used for the fields in the stack unwinding sections of
linkfiles. Actually, the relocation type is not important for this, because the linker will
change the format of these sections.
This (or its 32-bit variation) is also the relocation type that the linker internally uses for
filling in addresses in the DWARF symbol table sections, although they are marked as
R_IA_64_DIRx in linkfiles.
This relocation type does not occur in loadfiles because, by definition, such relocation
sites would never need updating at load time or by the -alf option of the linker.
R_IA_64_SECREL* -- Section-Relative Address
According to the standard, this indicates a value that is an offset from the start of the
same section of the loadfile. The only expected use of this is when one DWARF
section points at another DWARF section.
If someone wants to use SECREL in the future, to point between different code and
data sections, it won't work as specified. It will put in the distance from the start of the
section containing the reference site, rather than the start of the section containing the
target symbol.
R_IA_64_RELx -- Runtime Rebasing Address
In a DLL, this indicates an address that needs to be updated by the amount that this
DLL is rebased in memory at load time, or an address that needs to be updated by the
amount that the segment containing the address is moved by the -alf option of the
linker. There is no target symbol, so the target symbol index is always 0.










