[Dwarf-discuss] dwarf ver3.0: prologue_end and epilogue_begin bits

Ramanaiah Nalamothu ramana.venkat83@gmail.com
Tue May 22 04:44:19 GMT 2007

On 5/21/07, Michael Eager <eager at eagercon.com> wrote:
> Quoting Ramanaiah Nalamothu <ramana.venkat83 at gmail.com>:
> > Hi,
> >
> >  I am working at assembler context to emit the ELF-DWARF(dwarf ver3.0).
> I
> > need to set the bits prologue_end and epilogue_begin. My compiler emits
> > debug directive with specific -ve line numbers to indicate prologue_end
> and
> > epilogue_begin. But they are not acceptable line numbers in source file.
> > My doubt is, do I need to associate the their occurance with the source
> line
> > numbers or is it sufficient just to tell at what 'address' the
> prologue_end
> > or epilogue_begin occur? If debugger needs line number, what line
> numbers
> > should be emitted in my case?
> Each address in the line table is associated with a source line/column.
> Commonly, the line number associated with the prolog_end is the first
> line of the body of the function.  This is where a debugger will stop
> when you ask to set a breakpoint on the function.

For prologue_end, i can generate the line number as next one(start of
function body). And this is meaningful also in my case.

The line number associated with the epilogue_begin is after the body
> of the function, usually the closing brace.

But for epilogue_begin, in my case the next line number is .dbgline 0, this
will be generated always, please check the sample code snippet below with my
comments in between # #, which is also an invalid source line.

sample assembly code
;              x -> R5
;              z -> R7
    mov R12,R13
    stmfd R13!,{R4,R5,R6,R7,R11,R12,R14}
    mov R11,R13
    sub R13,R13,#0x8
    mov R7,R0
    mov R5,R1
    mov R6,R2
    .dbline -1
    .dbline 20
; }
; void
; foo (char *z, struct baz x, char *y)
; {
    .dbline 21
;   bar (&x, 6, 7, 8, 9, 10);
    mov R0,R5
    mov R1,#6
    mov R2,#7
    mov R3,#8
    mov R4,#9
    str R4,[R13,#0]
    mov R4,#10
    str R4,[R13,#+4]
    bl _bar
    .dbline -2                                                 # INDICATES
    ldmfd R11,{R4,R5,R6,R7,R11,SP,R15}
    .dbline 0 ; func end                                   # FUNCTION BODY
    .dbfile C:\cygwin\home\Administrator\Arm\test.c
    .dbsym r y 6 pc
    .dbsym r x 5 pS[baz]
    .dbsym r z 7 pc
    EXPORT _main
    .dbfunc e main _main fI
    AREA    "C$$code", CODE, READONLY
If the line number for epilogue_begin is the end of function body, if i
understood correctly, then we will be setting the line - address pair after
the end of epilogue operations, at least in my case i.e .dbgline 0
(func_end). Is this acceptable?

Is it ok if I say the debugger that at 'address' epilogue_begin occurs and
not associating that with any valid source line??

Am I missing anything? I am a newbie to DWARF. And i have no experience with
debugger. Sorry if i am wasting your time with silly doubts.

Please tell me if there is any online document, apart from dwarf standard
document itself, about dwarf or dwarf generator - debugger inter working
which should clarify my basic doubts.

Thanks for your reply.


> Michael Eager    Eager Consulting     eager at eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306  650-325-8077
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dwarfstd.org/private.cgi/dwarf-discuss-dwarfstd.org/attachments/20070522/a1a818d1/attachment.htm>

More information about the Dwarf-discuss mailing list