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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to