Dynamic Linking
Dynamic objects use a fixed eager-binding Bedrock GOT and PLT contract.
Dynamic Linking Rules
Ordinary dynamic linking supports standard and indirect functions, copy relocations, and R_BEDROCK_IRELATIVE. The loader resolves every ordinary R_BEDROCK_JUMP_SLOT and R_BEDROCK_IRELATIVE relocation before transferring control to the program entry point or any constructor. Shared-object calls use near CALL/RET within the ABI-visible linkage domain. The GOT base symbol is _GLOBAL_OFFSET_TABLE_.
Every ordinary PLT entry occupies 32 bytes and has 16-byte alignment.
GOT Reserved Entries
Global Offset Table Reserved Entries
| Index | Name | Meaning |
|---|---|---|
| 0 | _DYNAMIC |
dynamic section address |
| 1 | reserved | zero |
| 2 | reserved | zero |
PLT Layout
Procedure Linkage Table Layout
| Offset | Bytes or field | Effect |
|---|---|---|
+0x00 |
e7 c9 80 67 |
JMP.Q [PC + disp64] |
+0x04 |
disp64 |
little-endian R_BEDROCK_GOTPCREL64 relocation field |
+0x0c |
twenty 01 bytes |
canonical NOP padding through offset +0x1f |
A PLT relocation uses explicit addend +4. Architectural PC names byte zero of the current instruction, whereas relocation place P is the field at entry offset four; therefore GOT(S)+A-P evaluates to GOT(S)-PLTentry, the displacement consumed by the PC-relative EA. The referenced .got.plt slot is 8-byte aligned and contains the eagerly resolved 64-bit near target. Both the PLT entry and its slot must be reachable under the active CS bounds used by that PC-relative EA.
A PLT transfer preserves R0 through R7, F0 through F7, GS1 through GS5, FLAGS, and all segment state. The loader writes each final .got.plt value before publication. Published slots are immutable and may be covered by PT_GNU_RELRO.