[LLVMdev] .debug_info section size in arm executable

Chris Lattner clattner at apple.com
Wed Nov 9 14:12:23 PST 2011


On Nov 9, 2011, at 1:08 PM, Jim Grosbach wrote:
>> On Nov 9, 2011, at 10:49 AM, Jim Grosbach wrote:
>>>> 
>>>> It's not good, but people do it. Also constructing enums via & and | etc. It'd be nice to be able to get the name of whatever it is that the code generator actually produced :)
>>>> 
>>> 
>>> Agreed. LLVM itself does this sort of thing pretty frequently, actually, and having the enum names and values available in the debugger is very nice.
>> 
>> Wouldn't it be better to emit the enumerators that are actually used in a translation unit, instead of emitting all of them?  If we're not emitting them when used, that would be a problem, but I don't see a reason to care about enumerators that are never used anywhere in a program.

> Say something is going wrong for value E of the enum because the default case doesn't work for it. I want to put a conditional breakpoint on the switch statement for 'a == E', but E isn't explicitly used anywhere in the program since the call to foo passes the value as an int, constructed in some arbitrary manner.

So long as E is used in another file, you'll be able to do this.  If E isn't used anywhere in your app, then it's dead and doesn't seem interesting.

> Also consider the case where the caller of foo() (which does explicitly use E) is in a dylib we haven't loaded yet, and thus haven't looked at the debug info for. I want to set that same breakpoint.

-flimit-debug-info=0.  The entire idea of -gused is that you're building (almost) all of your app with debug info.  It's the default because this matches the common scenario.

In short, I still don't understand why we'd want to emit all the enumerators just because an enum type is used. :)

-Chris




More information about the llvm-dev mailing list