* frame debug info
@ 1997-12-05 1:33 Andrew Zabolotny
0 siblings, 0 replies; only message in thread
From: Andrew Zabolotny @ 1997-12-05 1:33 UTC (permalink / raw)
To: egcs
Hello!
I have a strange problem with the dwarf2 frame info, maybe somebody can
clarify me. Here is a section from the cc1plus output with frame information,
the sequence of lines has not been changed from the original source, except
that I've inserted here and there some comments.
// Sidenote: the port I`m talking about uses a.out format.
.align 2
___EXCEPTION_TABLE__:
.long LEHB22
.long LEHE22
.long L22
.long LEHB24
.long LEHE24
.long L24
.long LEHB38
.long LEHE38
.long L38
.long LEHB30
.long LEHE30
.long L30
.long LEHB33
.long LEHE33
.long L33
___EXCEPTION_END__:
.long -1
.long -1
.long -1
//
// this table is placed in the .code section, right after function body.
// IMHO this should be placed in the .data section, to avoid if possible
// loading it when no exceptions will occur.
//
.data
.globl __GLOBAL_$F$main
__GLOBAL_$F$main:
.stabs "___EH_LIST__",24,0,0,__GLOBAL_$F$main
//
// I use .stabs to build a chained list of __GLOBAL_$X$XXXXX labels
// (analogous to ctors and dtors), to avoid running collect2.
// Then __main() calls __register_frame_table(&__EH_LIST__) to register
// entire list of __GLOBAL$X$XXXX's.
//
___FRAME_BEGIN__:
.long LECIE1-LSCIE1
LSCIE1:
.long 0
.byte 0x1
.ascii "eh\0"
.long ___EXCEPTION_TABLE__
.byte 0x1
.byte 0x7c
.byte 0x8
.byte 0xc
.byte 0x5
.byte 0x4
.byte 0x88
.byte 0x1
.align 2
LECIE1:
//
// Now look how CIE structure is defined in frame.c:
//
// struct dwarf_cie {
// uword length;
// sword CIE_id;
// ubyte version;
// char augmentation[0];
// } __attribute__ ((packed, aligned (__alignof__ (void *))));
//
// The comment above the definition of dwarf_cie says:
//
// /* The first few fields of a CIE. The CIE_id field is 0xffffffff for a CIE,
// to distinguish it from a valid FDE. FDEs are aligned to an addressing
// unit boundary, but the fields within are unaligned. */
//
// First, I don't see CIE_id to be equal to 0xffffffff.
// Second, I don't understand why __GLOBAL_$F$main points to CIE instead
// of FDE, since as far as I understood __register_frame_table expects
// a pointer to FDE rather than to a CIE.
//
.long LEFDE1-LSFDE1
LSFDE1:
.long LSFDE1-___FRAME_BEGIN__
.long LFB1
.long LFE1-LFB1
.byte 0x4
.long LCFI0-LFB1
.byte 0xe
.byte 0x8
.byte 0x84
.byte 0x2
.byte 0x4
.long LCFI1-LCFI0
.byte 0xd
.byte 0x4
.byte 0x4
.long LCFI3-LCFI1
.byte 0x83
.byte 0x5
.byte 0x4
.long LCFI4-LCFI3
.byte 0x2e
.byte 0x4
.byte 0x4
.long LCFI5-LCFI4
[... and so on...]
//
// The above seems to be a FDE. But it can be referred only through
// LECIE1. This looks strange to me since I need a pointer to the FDE
// to register the exception region, and cannot use a local label for this.
//
// After thinking a bit I thought that dwarf2out::output_call_frame_info
// should put the get_file_function_name ('F') label between CIE and FDE.
// *OR* __register_frame_table should be modified to accept a list of
// pointers to CDEs rather than to FDEs.
//
// Now the question is: where am I wrong?
//
Greetings,
_\ndy@teamOS/2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~1997-12-05 1:33 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-12-05 1:33 frame debug info Andrew Zabolotny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).