[PATCH] D38721: [ELF] - Teach LLD to report line numbers for data symbols.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 27 10:17:13 PDT 2017
ruiu added inline comments.
================
Comment at: ELF/InputSection.cpp:292
+ // which describes variables and their locations.
+ if (Sym.Type == STT_OBJECT) {
+ if (Optional<std::pair<std::string, unsigned>> FileLine =
----------------
grimar wrote:
> ruiu wrote:
> > Are you sure that functions would never have type STT_OBJECT?
> It's interesting. Specification says functions and other executable code should be of type STT_FUNC:
> http://www.sco.com/developers/gabi/2000-07-17/ch4.symtab.html
> So at least it does not seem correct.
>
> At the same time it looks possible to do that:
> ```
> .section .text.fn,"ax", at progbits,unique,0
> .globl fn
> .type fn, at object
> fn:
> nop
>
> .section .text.fn2,"ax", at progbits,unique,0
> .globl fn2
> .type fn2, at function
> fn2:
> callq fn at PLT
> ```
>
> And you'll get
> ```
> 4: 0000000000400079 0 FUNC GLOBAL DEFAULT 1 fn2
> 7: 0000000000400078 0 OBJECT GLOBAL DEFAULT 1 fn
> ```
>
> We probably can fallback to always use .debug_line:
> ```
> if (Sym.Type == STT_OBJECT)
> if (Optional<std::pair<std::string, unsigned>> FileLine =
> File->getVariableLoc(Sym.getName()))
> return createFileLineMsg(FileLine->first, FileLine->second);
>
> if (Optional<DILineInfo> Info = File->getDILineInfo(this, Offset))
> return createFileLineMsg(Info->FileName, Info->Line);
> ```
>
> At least such behavior does not seem harmful for me.
> Do you think we should ? (I am not sure because with assembly it is possible
> to do many things, and particulary this one seems violates ELF spec, not sure we
> should even think about supporting that until it is reported useful).
>
>
Well, I think what I was trying to say is that we don't need to think about it too deeply. Why don't you just attempt both? First, try to get line info as a function, and if it fails, try as a variable.
https://reviews.llvm.org/D38721
More information about the llvm-commits
mailing list