[Dwarf-Discuss] Why "DW_LNS_advance_pc" is needed and when it be generated ?

Michael Eager eager at eagercon.com
Thu Aug 7 07:53:27 PDT 2008


Yu Zhenyang wrote:
> Hi, all,
> 
> I am working a compiler bug that relative to DW_LNS_advance_pc. In the 
> piece of C language code of "switch/case", when I send "next" to gdb for 
> the compiled binaray (with -g option) on statement "switch (n)", the PC 
> move to next function that defined next to the "switch/case" function.
> 
> When I compare the line number information with the gcc output. I found 
> there are extra "Advance PC by 36 to 214170" statement in Line Number 
> Statements at the end of the "switch/case" function.
> 
> I wonder when and why the statement is generated.  As far as I know, the 
> compiler only generate ".loc " in ".s" file. Then how and when the "as" 
> translates it. Also, why "DW_LNS_advance_pc" is needed and when it be 
> generated.
> 
> Can somebody give some advice? Thanks !

Can you tell a bit more about your environment?  What is your target?

Do all of the .loc statement appear correct?

Are there extra .loc statements which would cause additional
"DW_LNS_advance_pc" entries?

The line number table is basically a list of PC addresses with
information about each address, primarily what source statement
generated the code at that address.  The table is compressed into a list
of commands to a finite state machine which recreates the table.  There
are several commands like "DW_LNS_advance_pc" which specify the next
PC value where the information changes.  GAS generates these commands
based on the .loc statements.

-- 
Michael Eager	 eager at eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



More information about the Dwarf-Discuss mailing list