Nick Lewycky via llvm-dev
2020-Apr-30 19:29 UTC
[llvm-dev] relocation addend through C API
I'm using the LLVM object file C API to examine the contents of native object files on disk, and I couldn't find any way to retrieve the relocation addend. If it's not there, I'd like to add it, but I have some questions. From include/llvm-c/Object.h the APIs are: // RelocationRef accessors uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); // NOTE: Caller takes ownership of returned string of the two // following functions. const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); Of those, LLVMGetRelocationValueString looks promising (in some sense the Addend is an optional value on the relocation) but that function is simply strdup(""). It looks like not all file formats support addends on their relocations, so an implementation would have to check what type of object file it is and downcast to the right one, when it's an object file that supports addends. Is it OK for a GetAddend API to return 0 for relocations that have no addend or should the API expose the difference between a zero addend and not having an addend? While looking through LLVM, I also found definitions of relocations in BinaryFormat library and RuntimeDyld. Should we use one of those instead? Do either of them replace the object file library (or at least its Relocation), or have C APIs to inspect object files? Nick -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200430/7d33be8c/attachment.html>