erichkeane added a comment. In D112349#3109211 <https://reviews.llvm.org/D112349#3109211>, @nextsilicon-itay-bookstein wrote:
>> I don't know much about the ELF format... but this works today? We can >> define a resolver in a different TU and it WORKS thanks to the linker? So >> there is perhaps something? > > The ifunc symbol that is emitted in the TU with the undefined resolver loses > its connection to the resolver and the calls to the ifunc are instead bound > against the resolver itself (which is absolutely not what you want). > > itay> cat specific.c > #include <stdio.h> > > __attribute__((cpu_specific(generic))) > void single_version(void){ > puts("In single_version generic"); > } > > void useage() { > single_version(); > } > > itay> cat dispatch_main.c > void useage(void); > > __attribute__((cpu_dispatch(generic))) > void single_version(void); > > int main() > { > useage(); > single_version(); > return 0; > } > > itay> clang -c dispatch_main.c -o dispatch_main.c.o > itay> clang -c specific.c -o specific.c.o > itay> clang specific.c.o dispatch_main.c.o -o main > itay> ./main > In single_version generic > > This line should have been printed twice, not once. I see... thank you for your patience, my knowledge of ELF (or, that is, basically everything after Clang LLVM-IR generation) is pretty slim. I think what I would need to be able to correctly implement this is some level of 'forward declarable' ifunc. I have to be able to process declarations as we reach them, so just doing a function declaration then rewriting it wouldn't be allowed. Is it possible to get some IR-level 'ifunc' declaration implemented? If so, I think I have a good idea on how to implement that in the CFE. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112349/new/ https://reviews.llvm.org/D112349 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits