This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: v8.S dwarf2 eh frame issues again :(
- From: Jakub Jelinek <jakub at redhat dot com>
- To: "David S. Miller" <davem at redhat dot com>
- Cc: gcc at gcc dot gnu dot org, jsturm at one-point dot com
- Date: Sat, 20 Apr 2002 09:08:39 +0200
- Subject: Re: v8.S dwarf2 eh frame issues again :(
- References: <20020419.192357.21492923.davem@redhat.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Apr 19, 2002 at 07:23:57PM -0700, David S. Miller wrote:
>
> Dwarf2 unwinds from libjava/testsuite/libjava.lang/invokethrow.java
> fail to work unless I make the change at the end of thie email to the
> .eh_frame information added recently to libffi/src/sparc/v8.S
>
> I don't understand the .eh_frame format at all, basically what I did
> was compile a dummy "extern int bar(void); int foo(void) { bar(); }"
> with -g -fexceptions and copied the .eh_frame section code into v8.S
> and then the test started working.
Please use -fexceptions -fpic -dA to generate eh_frame. Does it work then?
> Either it is a bug in binutils eh frame optimizations, the .eh_frame
> specification currently in v8.S, or the runtime unwinder itself has an
> .eh_frame decoding bug of some sort.
>
> --- v8.S Wed Apr 10 19:57:34 2002
> +++ v8.S.NEW Fri Apr 19 10:26:03 2002
> @@ -106,36 +106,32 @@
>
> .section ".eh_frame",#alloc,#write
> .LLframe1:
> - .uaword .LLECIE1-.LLSCIE1 ! Length of Common Information Entry
> + .uaword .LLECIE1-.LLSCIE1
> .LLSCIE1:
> - .uaword 0x0 ! CIE Identifier Tag
> - .byte 0x1 ! CIE Version
> - .ascii "zR\0" ! CIE Augmentation
> - .byte 0x1 ! uleb128 0x1; CIE Code Alignment Factor
> - .byte 0x80-WS ! sleb128 -WS; CIE Data Alignment Factor
> - .byte 0xf ! CIE RA Column
> - .byte 0x1 ! uleb128 0x1; Augmentation size
> - .byte 0x50 ! FDE Encoding (aligned absolute)
> - .byte 0xc ! DW_CFA_def_cfa
> - .byte 0xe ! uleb128 0xe
> - .byte 0x0 ! uleb128 0x0
> - .align WS
> + .uaword 0x0
> + .byte 0x1
> + .asciz ""
> + .byte 0x1
> + .byte 0x80-WS
> + .byte 0xf
> + .byte 0xc
> + .byte 0xe
> + .byte 0x0
> + .align WS
> .LLECIE1:
> .LLSFDE1:
> - .uaword .LLEFDE1-.LLASFDE1 ! FDE Length
> + .uaword .LLEFDE1-.LLASFDE1
> .LLASFDE1:
> - .uaword .LLASFDE1-.LLframe1 ! FDE CIE offset
> - .align WS
> + .uaword .LLASFDE1-.LLframe1
> .nword .LLFB1
> - .uanword .LLFE1-.LLFB1 ! FDE address range
> - .byte 0x0 ! uleb128 0x0; Augmentation size
> - .byte 0x4 ! DW_CFA_advance_loc4
> + .uanword .LLFE1-.LLFB1
> + .byte 0x4
> .uaword .LLCFI0-.LLFB1
> - .byte 0xd ! DW_CFA_def_cfa_register
> - .byte 0x1e ! uleb128 0x1e
> - .byte 0x2d ! DW_CFA_GNU_window_save
> - .byte 0x9 ! DW_CFA_register
> - .byte 0xf ! uleb128 0xf
> - .byte 0x1f ! uleb128 0x1f
> - .align WS
> + .byte 0xd
> + .byte 0x1e
> + .byte 0x2d
> + .byte 0x9
> + .byte 0xf
> + .byte 0x1f
> + .align 4
> .LLEFDE1:
Jakub