nextsilicon-itay-bookstein added a comment.
It sort-of-works only because you define the ifunc in both translation units
(with the same name). But looks like it behaves incorrectly for references to
the ifunc in the translation unit where the resolver is only declared, not
defined:
> cat example1.ll
@single_version_ifunc = weak_odr dso_local ifunc void (), void ()* ()*
@single_version_resolver
define void ()* @single_version_resolver() {
ret void ()* null
}
define dso_local void @useage() local_unnamed_addr {
entry:
tail call void @single_version_ifunc()
ret void
}
> clang -c example1.ll -o example1.ll.o
> llvm-readobj --relocations example1.ll.o
File: example1.ll.o
Format: elf64-x86-64
Arch: x86_64
AddressSize: 64bit
LoadName: <Not found>
Relocations [
Section (3) .rela.text {
0x11 R_X86_64_PLT32 single_version_ifunc 0xFFFFFFFFFFFFFFFC <-- FINE
}
Section (6) .rela.eh_frame {
0x20 R_X86_64_PC32 .text 0x0
0x34 R_X86_64_PC32 .text 0x10
}
]
> cat example2.ll
@single_version_ifunc = weak_odr dso_local ifunc void (), void ()* ()*
@single_version_resolver
declare void ()* @single_version_resolver()
define dso_local void @useage() local_unnamed_addr {
entry:
tail call void @single_version_ifunc()
ret void
}
> clang -c example2.ll -o example2.ll.o
> llvm-readobj --relocations example2.ll.o
File: example2.ll.o
Format: elf64-x86-64
Arch: x86_64
AddressSize: 64bit
LoadName: <Not found>
Relocations [
Section (3) .rela.text {
0x1 R_X86_64_PLT32 single_version_resolver 0xFFFFFFFFFFFFFFFC <-- WHOOPS
}
Section (6) .rela.eh_frame {
0x20 R_X86_64_PC32 .text 0x0
}
]
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112349/new/
https://reviews.llvm.org/D112349
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits