jrtc27 added a comment.

If it's bypassing the descriptors then __builtin_symbol_address is the wrong 
name (and a bit ambiguous). As far as dlsym is concerned, the symbol is the 
descriptor, but when you get down to the ELF representation itself that's not 
always true. For PPC64 ELFv1, the ELF symbol is the descriptor, and the entry 
point has a different name. For PA-RISC and Itanium, the ELF symbol is the 
entry point, and you request the descriptor rather than the entry point by 
using a different relocation to the normal data pointer one (well, Itanium has 
a whole set of them, you have {32,64} x {LSB,MSB} plus a 64I one for putting 
into an X format instruction's immediate, and GP-relative GOT-indirect 
(`@ltoff`) versions of all those, plus a bonus 22-bit immediate one for that).

For CHERI there's the added complication that descriptors and trampolines can 
exist for security reasons when crossing security domains, and you absolutely 
should not let one compartment get pointers to the entry point of another 
compartment's function. You can hand it out if sealed or the permissions are 
cleared, as then you can't really do anything with it other than look at the 
integer address, but that seems a bit odd.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108479/new/

https://reviews.llvm.org/D108479

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to