etc:users:jcmvbkbc:binutils-xtensa
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
etc:users:jcmvbkbc:binutils-xtensa [2024/02/22 09:26] – add plt call subsection jcmvbkbc | etc:users:jcmvbkbc:binutils-xtensa [2024/03/18 14:47] (current) – jcmvbkbc | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== binutils support for Xtensa ===== | + | ====== binutils support for Xtensa |
* git tree: https:// | * git tree: https:// | ||
- | ==== FDPIC support ==== | + | ===== FDPIC support |
* [+] static linking | * [+] static linking | ||
* [+] PDE | * [+] PDE | ||
* [+] PIE | * [+] PIE | ||
- | * [-] PLT and lazy binding | + | * [±] PLT and lazy binding |
- | * [-] TLS | + | * [+] TLS |
- | ==== FDPIC instruction sequences ==== | + | ===== FDPIC instruction sequences |
- | === Local call ==== | + | ==== Local call ==== |
Default local call | Default local call | ||
Line 44: | Line 44: | ||
</ | </ | ||
- | === PLT call ==== | + | ==== PLT call ==== |
Obvious version: | Obvious version: | ||
Line 73: | Line 73: | ||
</ | </ | ||
that reduces the inline part from 14 to 5 bytes, but adds two jumps to each call and some special logic to the resolver to avoid name resolution on each call. | that reduces the inline part from 14 to 5 bytes, but adds two jumps to each call and some special logic to the resolver to avoid name resolution on each call. | ||
+ | |||
+ | ==== TLS Support ==== | ||
+ | |||
+ | === TLS General Dynamic === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +5: | ||
+ | +7: | ||
+ | +9: | ||
+ | +12: callx0 | ||
+ | </ | ||
+ | |||
+ | This TLSDESC is not the same as the descriptor of the default xtensa toolchain. It contains two pointers, one to the resolver function, the other to that other descriptor containing DTPOFF and module index in the dtv. | ||
+ | |||
+ | === TLS Local Dynamic === | ||
+ | |||
+ | Header getting the address of the _TLS_MODULE_BASE_ is the same as in General Dynamic, or a possible one instruction less version: | ||
+ | < | ||
+ | +0: | ||
+ | +2: | ||
+ | +4: | ||
+ | +6: | ||
+ | +9: | ||
+ | ... | ||
+ | +m: | ||
+ | +m+3: | ||
+ | ... | ||
+ | </ | ||
+ | _TLS_MODULE_BASE_DESC_OFF is a small fixed offset (16?) from the GOT base where an entry with R_XTENSA_TLSDESC(_TLS_MODULE_BASE_) relocation against it is placed. | ||
+ | |||
+ | === TLS Initial Exec === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +5: | ||
+ | +7: | ||
+ | +10: add res, tmp3, tmp4 | ||
+ | </ | ||
+ | |||
+ | === TLS Local Exec === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +6: | ||
+ | </ | ||
+ | |||
+ | ==== Linker optimizations ==== | ||
+ | |||
+ | === General Dynamic -> Initial Exec === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +5: | ||
+ | +7: | ||
+ | +9: | ||
+ | +12: callx0 | ||
+ | </ | ||
+ | |||
+ | === General Dynamic -> Local Exec === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +5: | ||
+ | +7: | ||
+ | +9: | ||
+ | +12: callx0 | ||
+ | </ | ||
+ | |||
+ | === Initial Exec -> Local Exec === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +3: | ||
+ | +5: | ||
+ | +7: | ||
+ | +10: add res, tmp3, tmp4 | ||
+ | </ | ||
==== Manual toolchain building script ==== | ==== Manual toolchain building script ==== |
etc/users/jcmvbkbc/binutils-xtensa.1708583217.txt.gz · Last modified: 2024/02/22 09:26 by jcmvbkbc