[LLVMdev] SymbolRef and getSize

Benjamin Kramer benny.kra at gmail.com
Wed Jul 15 09:07:16 PDT 2015


> On 15.07.2015, at 17:52, Wehrli Johan <johan.wehrli at heig-vd.ch> wrote:
> 
> 
> Hi everyone,
> 
> I’m currently playing with the clang driver and I encounter a strange bug.
> 
> It occurs when I used the getSize function from the SymbolRef class.
> 
> On iOS, the number returned is not always correct (some function have the right size).

Only ELF has usable size information, MachO and COFF do not. That's also the reason why SymbolRef::getSize doesn't exist anymore in LLVM trunk. To get the real sizes you can either use the address trick used by MachODump.cpp or use computeSymbolSizes which wraps this in a convenient API.

- Ben

> 
> Sadly,
> 
> This is my code (at the end of the main function into driver.cpp) :
> 
> ####
> 
> ErrorOr<OwningBinary<Binary>> BinaryOrErr = createBinary(file);
> if (std::error_code ec = BinaryOrErr.getError()) {
>  return ec.value();
> }
> 
> Binary &Binary = *BinaryOrErr.get().getBinary();
> object::ObjectFile *objfile;
> 
> objfile = dyn_cast<ObjectFile>(&Binary);
> 
> for (const SymbolRef &Symbol : objfile->symbols()) {
> uint64_t size;
>  Symbol.getAddress(size);
> 
> }
> 
> ####
> 
> During my previous search, I check machODump.cpp in order to see of the list all the function.
> 
> They never use the getSize() but they use the address (getAddress()) of the next function.
> 
> Does anyone have ever heard of a bug with this function or did I do something wrong?
> 
> Greeting,
> 
> Johan Wehrli
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list