aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/Shell/Register/x86-multithread-write.test
diff options
context:
space:
mode:
authorWael Yehia <wmyehia2001@yahoo.com>2026-02-03 14:15:16 -0500
committerGitHub <noreply@github.com>2026-02-03 14:15:16 -0500
commite1f69ee8e84784d164a1a748cd6c080830ecd0e8 (patch)
tree8ce83cdfbc965daf220cc96bf2beb517dfc6a712 /lldb/test/Shell/Register/x86-multithread-write.test
parent9481902eff35960154cf1ee245f010cf960bf395 (diff)
downloadllvm-main.zip
llvm-main.tar.gz
llvm-main.tar.bz2
[AIX] Implement the ifunc attribute. (#153049)HEADmain
Currently, the AIX linker and loader do not provide a mechanism to implement ifuncs similar to GNU_ifunc on ELF Linux. On AIX, we will lower `__attribute__((ifunc("resolver"))` to the llvm `ifunc` as other platforms do. The llvm `ifunc` in turn will get lowered at late stages of the optimization pipeline to an AIX-specific implementation. No special linkage or relocations are needed when generating assembly/object output. On AIX, a function `foo` has two symbols associated with it: a function descriptor (`foo`) residing in the `.data` section, and an entry point (`.foo`) residing in the `.text` section. The first field of the descriptor is the address of the entry point. Typically, the address field in the descriptor is initialized once: statically, at load time (?), or at runtime if runtime linking is enabled. Here we would like to use the address field in the descriptor to implement the `ifunc` semantics. Specifically, the ifunc function will become a stub that jumps to the entry point in the address field. A constructor function is linked into every linkage module. The constructor walks an array of `{descriptor, resolver}` pairs, calling the resolver and saving the result in the address field in the descriptor (thus setting `foo`'s descriptor to point to the resolved version early during program runtime). Known limitations: - Due to bug #161576, which affects object generation path, you will need either `-ffunction-sections` or `-fno-integrated-as` to generate a correct/linkable object file. - aliases to ifuncs are not supported, a testcase has been added and marked XFAIL. I'm planning to address in a follow-up PR because it's not important enough, IMHO, for this PR - dead ifuncs in a CU that contains at least one live ifunc, will result in all ifuncs being kept by the linker. The fix for this is common with a similar problem we have with PGO. PR #159435 is trying to provide a mechanism that will allow the ifunc and PGO implementations to avoid the dead code retention at the link step. - the resolver must return a function that is in the same DSO as the ifunc; the compiler will try to detect if this condition is violated and report it, but it cannot detect it in general. To be safe, all candidate functions (returned by a particular resolver) must either be static or have hidden/protected visibility. This is so that the ifunc stub doesn't have to save and restore the TOC register r2. In future work, this case will be supported and the requirement will be lifted. --------- Co-authored-by: Wael Yehia <wyehia@ca.ibm.com>
Diffstat (limited to 'lldb/test/Shell/Register/x86-multithread-write.test')
0 files changed, 0 insertions, 0 deletions