![Intel NIOS II Owner Reference Manual Download Page 159](http://html1.mh-extra.com/html/intel/nios-ii/nios-ii_owner-reference-manual_2071826159.webp)
7.9.1.2. Jump Slot Relocation
Jump slot relocations are used for the PLT.
For information about the PLT, refer to "Procedure Linkage Table" section.
Related Information
•
Procedure Linkage Table
on page 165
•
Procedure Linkage Table
on page 165
7.9.1.3. Thread-Local Storage
The Nios II processor uses the Variant I model for thread-local storage.
The end of the thread control block (TCB) is located 0x7000 bytes before the thread
pointer. The TCB is eight bytes long. The first word is the dynamic thread pointer
(DTV) pointer and the second word is reserved. Each module’s dynamic thread pointer
is biased by 0x8000 (when retrieved using
__tls_get_addr
). The thread library can
store additional private information before the TCB.
In the GNU Linux toolchain, the GOT pointer (
_gp_got
) is always kept in
r22
, and the
thread pointer is always kept in
r23
.
In the following examples, any registers can be used, except that the argument to
__tls_get_addr
is always passed in
r4
and its return value is always returned in
r2
. Calls to
__tls_get_addr
must use the normal position-independent code (PIC)
calling convention in PIC code; these sequences are for example only, and the
compiler might generate different sequences. No linker relaxations are defined.
Example 7. General Dynamic Model
addi r4, r22, %tls_gd(x) # R_NIOS2_TLS_GD16 x
call __tls_get_addr # R_NIOS2_CALL26 __tls_get_addr
# Address of x in r2
In the general dynamic model, a two-word GOT slot is allocated for x, as shown in
"GOT Slot for General Dynamic Model" example.
Example 8. GOT Slot for General Dynamic Model
GOT[n] R_NIOS2_TLS_DTPMOD x
GOT[n+1] R_NIOS2_TLS_DTPREL x
Example 9. Local Dynamic Model
addi r4, r22, %tls_ldm(x) # R_NIOS2_TLS_LDM16 x
call __tls_get_addr # R_NIOS2_CALL26 __tls_get_addr
addi r5, r2, %tls_ldo(x) # R_NIOS2_TLS_LDO16 x
# Address of x in r5
ldw r6, %tls_ldo(x2)(r2) # R_NIOS2_TLS_LDO16 x2
# Value of x2 in r6
One 2-word GOT slot is allocated for all R_NIOS2_TLS_LDM16 operations in the linked
object. Any thread-local symbol in this object can be used, as shown in "GOT Slot with
Thread-Local Storage" example.
7. Application Binary Interface
NII-PRG | 2018.04.18
Nios II Processor Reference Guide
159