etc:users:jcmvbkbc:binutils-xtensa
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
etc:users:jcmvbkbc:binutils-xtensa [2024/02/24 12:30] – add PLT and TLS GD sequences jcmvbkbc | etc:users:jcmvbkbc:binutils-xtensa [2024/03/06 05:22] – add TLS link time optimizations 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 | ||
Line 11: | Line 11: | ||
* [-] 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 === | === TLS General Dynamic === | ||
< | < | ||
- | +0: | + | +0: |
- | +3: | + | +3: |
- | +5: | + | +5: |
- | +7: | + | +7: |
- | +9: | + | +9: |
- | +11: callx0 | + | +11: 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. | 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 === | ||
+ | |||
+ | < | ||
+ | +0: | ||
+ | +2: | ||
+ | +4: | ||
+ | +6: | ||
+ | +8: | ||
+ | ... | ||
+ | +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 | ||
+ | </ | ||
==== Manual toolchain building script ==== | ==== Manual toolchain building script ==== |
etc/users/jcmvbkbc/binutils-xtensa.txt · Last modified: 2024/03/18 14:47 by jcmvbkbc