public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Incorrect assumption on the CIE/FDE alignment
@ 2006-05-13  1:07 H. J. Lu
  2006-05-13 17:42 ` PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section H. J. Lu
  0 siblings, 1 reply; 5+ messages in thread
From: H. J. Lu @ 2006-05-13  1:07 UTC (permalink / raw)
  To: binutils; +Cc: richard

Hi Richard,

Your patch:

http://sourceware.org/ml/binutils/2004-11/msg00226.html

assumes that CIE/FDE are aligned at the pointer size. But it isn't
necessarily true. See

http://sources.redhat.com/bugzilla/show_bug.cgi?id=2657

Do you have any suggestions?

Thanks.



H.J.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section
  2006-05-13  1:07 Incorrect assumption on the CIE/FDE alignment H. J. Lu
@ 2006-05-13 17:42 ` H. J. Lu
  2006-05-15  2:03   ` H. J. Lu
  0 siblings, 1 reply; 5+ messages in thread
From: H. J. Lu @ 2006-05-13 17:42 UTC (permalink / raw)
  To: binutils; +Cc: richard

On Fri, May 12, 2006 at 10:05:12AM -0700, H. J. Lu wrote:
> Hi Richard,
> 
> Your patch:
> 
> http://sourceware.org/ml/binutils/2004-11/msg00226.html
> 
> assumes that CIE/FDE are aligned at the pointer size. But it isn't
> necessarily true. See
> 
> http://sources.redhat.com/bugzilla/show_bug.cgi?id=2657
> 

This patch fixes 2 PRs 2655/2657. PR 2655 is a gcc bug

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27576

PR 2657 is we don't properly shrink CIE/FDE.



H.J.
-----
2006-05-12  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2657
	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Properly
	update CIE/FDE length.

	PR ld/2655
	* elf.c (_bfd_elf_make_section_from_shdr): Enforce pointer
	alignment on .eh_frame sections.

--- bfd/elf-eh-frame.c.eh	2006-05-02 06:49:58.000000000 -0700
+++ bfd/elf-eh-frame.c	2006-05-12 12:30:12.000000000 -0700
@@ -1075,12 +1075,14 @@ _bfd_elf_write_section_eh_frame (bfd *ab
       end = buf + ent->size;
       new_size = size_of_output_cie_fde (ent, ptr_size);
 
-      /* Install the new size, filling the extra bytes with DW_CFA_nops.  */
+      /* Update the size.  We may have shrinked it.  */
+      bfd_put_32 (abfd, new_size - 4, buf);
+
+      /* Filling the extra bytes with DW_CFA_nops.  */
       if (new_size != ent->size)
-	{
-	  memset (end, 0, new_size - ent->size);
-	  bfd_put_32 (abfd, new_size - 4, buf);
-	}
+	memset (end, 0, new_size - ent->size);
+
+
 
       if (ent->cie)
 	{
--- bfd/elf.c.eh	2006-05-11 09:26:36.000000000 -0700
+++ bfd/elf.c	2006-05-12 11:26:19.000000000 -0700
@@ -731,6 +731,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 {
   asection *newsect;
   flagword flags;
+  bfd_vma alignment;
   const struct elf_backend_data *bed;
 
   if (hdr->bfd_section != NULL)
@@ -754,10 +755,24 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 
   newsect->filepos = hdr->sh_offset;
 
+  bed = get_elf_backend_data (abfd);
+
+  alignment = hdr->sh_addralign;
+  if (hdr->sh_type == SHT_PROGBITS && strcmp (name, ".eh_frame") == 0)
+    {
+      /* The .eh_frame sections in crtend.o from gcc on 64bit targets
+	 may be aligned at 4 byte.  But the runtime library and linker
+	 expect it is aligned at 8.  We adjust the section alignment if
+	 it is too small.  PR 2655.  */
+      bfd_vma eh_frame_alignment = bed->s->arch_size / 8;
+      if (alignment < eh_frame_alignment)
+	alignment = eh_frame_alignment;
+    }
+
   if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
       || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
       || ! bfd_set_section_alignment (abfd, newsect,
-				      bfd_log2 ((bfd_vma) hdr->sh_addralign)))
+				      bfd_log2 (alignment)))
     return FALSE;
 
   flags = SEC_NO_FLAGS;
@@ -840,7 +855,6 @@ _bfd_elf_make_section_from_shdr (bfd *ab
       && elf_next_in_group (newsect) == NULL)
     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
 
-  bed = get_elf_backend_data (abfd);
   if (bed->elf_backend_section_flags)
     if (! bed->elf_backend_section_flags (&flags, hdr))
       return FALSE;

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section
  2006-05-13 17:42 ` PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section H. J. Lu
@ 2006-05-15  2:03   ` H. J. Lu
  2006-05-15  3:19     ` H. J. Lu
  0 siblings, 1 reply; 5+ messages in thread
From: H. J. Lu @ 2006-05-15  2:03 UTC (permalink / raw)
  To: binutils; +Cc: richard

[-- Attachment #1: Type: text/plain, Size: 961 bytes --]

On Fri, May 12, 2006 at 01:54:13PM -0700, H. J. Lu wrote:
> On Fri, May 12, 2006 at 10:05:12AM -0700, H. J. Lu wrote:
> > Hi Richard,
> > 
> > Your patch:
> > 
> > http://sourceware.org/ml/binutils/2004-11/msg00226.html
> > 
> > assumes that CIE/FDE are aligned at the pointer size. But it isn't
> > necessarily true. See
> > 
> > http://sources.redhat.com/bugzilla/show_bug.cgi?id=2657
> > 
> 
> This patch fixes 2 PRs 2655/2657. PR 2655 is a gcc bug
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27576
> 
> PR 2657 is we don't properly shrink CIE/FDE.
> 

It turns out that _bfd_elf_discard_section_eh_frame will always pad
CIE/FDE record to the pointer size boundary since it calls
size_of_output_cie_fde to set the CIE/FDE record size. Even if the next
.eh_frame section is marked for 4 byte alignment, it always will be
aligned at the pointer size. Fixing PR 2657 will also fix PR 2655.
I am enclosing an upated patch and 2 testcases for x86-64.


H.J.

[-- Attachment #2: bfd-eh-3.patch --]
[-- Type: text/plain, Size: 860 bytes --]

2006-05-12  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2655
	PR ld/2657
	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Properly
	update CIE/FDE length.

--- bfd/elf-eh-frame.c.eh	2006-05-02 06:49:58.000000000 -0700
+++ bfd/elf-eh-frame.c	2006-05-12 17:19:33.000000000 -0700
@@ -1075,12 +1075,12 @@ _bfd_elf_write_section_eh_frame (bfd *ab
       end = buf + ent->size;
       new_size = size_of_output_cie_fde (ent, ptr_size);
 
-      /* Install the new size, filling the extra bytes with DW_CFA_nops.  */
+      /* Update the size.  It may be shrinked.  */
+      bfd_put_32 (abfd, new_size - 4, buf);
+
+      /* Filling the extra bytes with DW_CFA_nops.  */
       if (new_size != ent->size)
-	{
-	  memset (end, 0, new_size - ent->size);
-	  bfd_put_32 (abfd, new_size - 4, buf);
-	}
+	memset (end, 0, new_size - ent->size);
 
       if (ent->cie)
 	{

[-- Attachment #3: ld-test-eh-1.patch --]
[-- Type: text/plain, Size: 3144 bytes --]

2006-05-12  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2655
	PR ld/2657
	* ld-elf/eh1.d: New file.
	* ld-elf/eh1.s: Likewise.
	* ld-elf/eh1a.s: Likewise.
	* ld-elf/eh2.d: Likewise.
	* ld-elf/eh2a.s: Likewise.

--- ld/testsuite/ld-elf/eh1.d.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1.d	2006-05-12 17:15:23.000000000 -0700
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh1a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+  Version:               1
+  Augmentation:          ""
+  Code alignment factor: 1
+  Data alignment factor: -8
+  Return address column: 16
+
+  DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_offset: 16
+  DW_CFA_offset: r6 at cfa-16
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
--- ld/testsuite/ld-elf/eh1.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1.s	2006-05-12 17:15:46.000000000 -0700
@@ -0,0 +1,47 @@
+	.text
+.globl _start
+	.type	_start, %function
+_start:
+.LFB2:
+.LCFI0:
+.LCFI1:
+.LFE2:
+	.size	_start, .-_start
+	.section	.eh_frame,"a",%progbits
+.Lframe1:
+	.long	.LECIE1-.LSCIE1
+.LSCIE1:
+	.long	0x0
+	.byte	0x1
+	.string	""
+	.uleb128 0x1
+	.sleb128 -8
+	.byte	0x10
+	.byte	0xc
+	.uleb128 0x7
+	.uleb128 0x8
+	.byte	0x90
+	.uleb128 0x1
+	.align 8
+.LECIE1:
+.LSFDE1:
+	.long	.LEFDE1-.LASFDE1
+.LASFDE1:
+	.long	.LASFDE1-.Lframe1
+	.quad	.LFB2
+	.quad	.LFE2-.LFB2
+	.byte	0x4
+	.long	.LCFI0-.LFB2
+	.byte	0xe
+	.uleb128 0x10
+	.byte	0x86
+	.uleb128 0x2
+	.byte	0x4
+	.long	.LCFI1-.LCFI0
+	.byte	0xd
+	.uleb128 0x6
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+.LEFDE1:
--- ld/testsuite/ld-elf/eh1a.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1a.s	2006-05-12 17:17:36.000000000 -0700
@@ -0,0 +1,3 @@
+	.section	.eh_frame,"a",%progbits
+	.align	8
+	.zero	4
--- ld/testsuite/ld-elf/eh2.d.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh2.d	2006-05-12 17:18:35.000000000 -0700
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh2a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+  Version:               1
+  Augmentation:          ""
+  Code alignment factor: 1
+  Data alignment factor: -8
+  Return address column: 16
+
+  DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_offset: 16
+  DW_CFA_offset: r6 at cfa-16
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
--- ld/testsuite/ld-elf/eh2a.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh2a.s	2006-05-12 17:17:42.000000000 -0700
@@ -0,0 +1,3 @@
+	.section	.eh_frame,"a",%progbits
+	.align	4
+	.zero	4

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section
  2006-05-15  2:03   ` H. J. Lu
@ 2006-05-15  3:19     ` H. J. Lu
  2006-05-24 12:16       ` Alan Modra
  0 siblings, 1 reply; 5+ messages in thread
From: H. J. Lu @ 2006-05-15  3:19 UTC (permalink / raw)
  To: binutils; +Cc: richard

[-- Attachment #1: Type: text/plain, Size: 1378 bytes --]

On Fri, May 12, 2006 at 05:52:46PM -0700, H. J. Lu wrote:
> On Fri, May 12, 2006 at 01:54:13PM -0700, H. J. Lu wrote:
> > On Fri, May 12, 2006 at 10:05:12AM -0700, H. J. Lu wrote:
> > > Hi Richard,
> > > 
> > > Your patch:
> > > 
> > > http://sourceware.org/ml/binutils/2004-11/msg00226.html
> > > 
> > > assumes that CIE/FDE are aligned at the pointer size. But it isn't
> > > necessarily true. See
> > > 
> > > http://sources.redhat.com/bugzilla/show_bug.cgi?id=2657
> > > 
> > 
> > This patch fixes 2 PRs 2655/2657. PR 2655 is a gcc bug
> > 
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27576
> > 
> > PR 2657 is we don't properly shrink CIE/FDE.
> > 
> 
> It turns out that _bfd_elf_discard_section_eh_frame will always pad
> CIE/FDE record to the pointer size boundary since it calls
> size_of_output_cie_fde to set the CIE/FDE record size. Even if the next
> .eh_frame section is marked for 4 byte alignment, it always will be
> aligned at the pointer size. Fixing PR 2657 will also fix PR 2655.
> I am enclosing an upated patch and 2 testcases for x86-64.
> 
> 

We shouldn't pad the .eh_frame section to its section alignment. We
only need to make sure that CIE/FDE records are aligned at pointer
size. Otherwise, we may generate bad .eh_frame section if the input
section alignment isn't pointer size. I am enclosing a new patch. I
also added a new testcase.


H.J.

[-- Attachment #2: bfd-eh-4.patch --]
[-- Type: text/plain, Size: 2394 bytes --]

2006-05-13  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2655
	PR ld/2657
	* elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Properly
	update CIE/FDE length.  Don't pad to the section alignment.

--- bfd/elf-eh-frame.c.eh	2006-05-02 06:49:58.000000000 -0700
+++ bfd/elf-eh-frame.c	2006-05-13 10:33:37.000000000 -0700
@@ -1075,12 +1075,12 @@ _bfd_elf_write_section_eh_frame (bfd *ab
       end = buf + ent->size;
       new_size = size_of_output_cie_fde (ent, ptr_size);
 
-      /* Install the new size, filling the extra bytes with DW_CFA_nops.  */
+      /* Update the size.  It may be shrinked.  */
+      bfd_put_32 (abfd, new_size - 4, buf);
+
+      /* Filling the extra bytes with DW_CFA_nops.  */
       if (new_size != ent->size)
-	{
-	  memset (end, 0, new_size - ent->size);
-	  bfd_put_32 (abfd, new_size - 4, buf);
-	}
+	memset (end, 0, new_size - ent->size);
 
       if (ent->cie)
 	{
@@ -1262,40 +1262,13 @@ _bfd_elf_write_section_eh_frame (bfd *ab
 	}
     }
 
-    {
-      unsigned int alignment = 1 << sec->alignment_power;
-      unsigned int pad = sec->size % alignment;
-
-      /* Don't pad beyond the raw size of the output section. It
-	 can happen at the last input section.  */
-      if (pad
-	  && ((sec->output_offset + sec->size + pad)
-	      <= sec->output_section->size))
-	{
-	  bfd_byte *buf;
-	  unsigned int new_size;
-
-	  /* Find the last CIE/FDE.  */
-	  ent = sec_info->entry + sec_info->count;
-	  while (--ent != sec_info->entry)
-	    if (!ent->removed)
-	      break;
-
-	  /* The size of the last CIE/FDE must be at least 4.  */
-	  if (ent->removed || ent->size < 4)
-	    abort ();
-
-	  pad = alignment - pad;
-	  buf = contents + ent->new_offset - sec->output_offset;
-	  new_size = size_of_output_cie_fde (ent, ptr_size);
-
-	  /* Pad it with DW_CFA_nop  */
-	  memset (buf + new_size, 0, pad);
-	  bfd_put_32 (abfd, new_size + pad - 4, buf);
-
-	  sec->size += pad;
-	}
-    }
+  /* We don't align the section to its section alignment since the
+     runtime library only expects all CIE/FDE records aligned at
+     the pointer size. _bfd_elf_discard_section_eh_frame should 
+     have padded CIE/FDE records to multiple of pointer size with
+     size_of_output_cie_fde.  */
+  if ((sec->size % ptr_size) != 0)
+    abort ();
 
   return bfd_set_section_contents (abfd, sec->output_section,
 				   contents, (file_ptr) sec->output_offset,

[-- Attachment #3: ld-test-eh-2.patch --]
[-- Type: text/plain, Size: 5128 bytes --]

2006-05-12  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2655
	PR ld/2657
	* ld-elf/eh1.d: New file.
	* ld-elf/eh1.s: Likewise.
	* ld-elf/eh1a.s: Likewise.
	* ld-elf/eh2.d: Likewise.
	* ld-elf/eh2a.s: Likewise.
	* ld-elf/eh3.d: Likewise.
	* ld-elf/eh3.s: Likewise.
	* ld-elf/eh3a.s: Likewise.

--- ld/testsuite/ld-elf/eh1.d.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1.d	2006-05-12 17:15:23.000000000 -0700
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh1a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+  Version:               1
+  Augmentation:          ""
+  Code alignment factor: 1
+  Data alignment factor: -8
+  Return address column: 16
+
+  DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_offset: 16
+  DW_CFA_offset: r6 at cfa-16
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
--- ld/testsuite/ld-elf/eh1.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1.s	2006-05-12 17:15:46.000000000 -0700
@@ -0,0 +1,47 @@
+	.text
+.globl _start
+	.type	_start, %function
+_start:
+.LFB2:
+.LCFI0:
+.LCFI1:
+.LFE2:
+	.size	_start, .-_start
+	.section	.eh_frame,"a",%progbits
+.Lframe1:
+	.long	.LECIE1-.LSCIE1
+.LSCIE1:
+	.long	0x0
+	.byte	0x1
+	.string	""
+	.uleb128 0x1
+	.sleb128 -8
+	.byte	0x10
+	.byte	0xc
+	.uleb128 0x7
+	.uleb128 0x8
+	.byte	0x90
+	.uleb128 0x1
+	.align 8
+.LECIE1:
+.LSFDE1:
+	.long	.LEFDE1-.LASFDE1
+.LASFDE1:
+	.long	.LASFDE1-.Lframe1
+	.quad	.LFB2
+	.quad	.LFE2-.LFB2
+	.byte	0x4
+	.long	.LCFI0-.LFB2
+	.byte	0xe
+	.uleb128 0x10
+	.byte	0x86
+	.uleb128 0x2
+	.byte	0x4
+	.long	.LCFI1-.LCFI0
+	.byte	0xd
+	.uleb128 0x6
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+.LEFDE1:
--- ld/testsuite/ld-elf/eh1a.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh1a.s	2006-05-12 17:17:36.000000000 -0700
@@ -0,0 +1,3 @@
+	.section	.eh_frame,"a",%progbits
+	.align	8
+	.zero	4
--- ld/testsuite/ld-elf/eh2.d.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh2.d	2006-05-12 17:18:35.000000000 -0700
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh2a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+  Version:               1
+  Augmentation:          ""
+  Code alignment factor: 1
+  Data alignment factor: -8
+  Return address column: 16
+
+  DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_offset: 16
+  DW_CFA_offset: r6 at cfa-16
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
--- ld/testsuite/ld-elf/eh2a.s.eh	2006-05-12 17:43:02.000000000 -0700
+++ ld/testsuite/ld-elf/eh2a.s	2006-05-12 17:17:42.000000000 -0700
@@ -0,0 +1,3 @@
+	.section	.eh_frame,"a",%progbits
+	.align	4
+	.zero	4
--- ld/testsuite/ld-elf/eh3.d.eh	2006-05-13 10:24:59.000000000 -0700
+++ ld/testsuite/ld-elf/eh3.d	2006-05-13 10:27:12.000000000 -0700
@@ -0,0 +1,33 @@
+#source: eh3.s
+#source: eh3a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+  Version:               1
+  Augmentation:          ""
+  Code alignment factor: 1
+  Data alignment factor: -8
+  Return address column: 16
+
+  DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+
+00000018 0000001c 0000001c FDE cie=00000000 pc=004000b0..004000b0
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_offset: 16
+  DW_CFA_offset: r6 at cfa-16
+  DW_CFA_advance_loc: 0 to 004000b0
+  DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+#pass
--- ld/testsuite/ld-elf/eh3.s.eh	2006-05-13 10:24:44.000000000 -0700
+++ ld/testsuite/ld-elf/eh3.s	2006-05-13 10:24:24.000000000 -0700
@@ -0,0 +1,48 @@
+	.text
+.globl _start
+	.type	_start, %function
+_start:
+.LFB2:
+.LCFI0:
+.LCFI1:
+.LFE2:
+	.size	_start, .-_start
+	.section	.eh_frame,"a",%progbits
+	.align 16
+.Lframe1:
+	.long	.LECIE1-.LSCIE1
+.LSCIE1:
+	.long	0x0
+	.byte	0x1
+	.string	""
+	.uleb128 0x1
+	.sleb128 -8
+	.byte	0x10
+	.byte	0xc
+	.uleb128 0x7
+	.uleb128 0x8
+	.byte	0x90
+	.uleb128 0x1
+	.align 8
+.LECIE1:
+.LSFDE1:
+	.long	.LEFDE1-.LASFDE1
+.LASFDE1:
+	.long	.LASFDE1-.Lframe1
+	.quad	.LFB2
+	.quad	.LFE2-.LFB2
+	.byte	0x4
+	.long	.LCFI0-.LFB2
+	.byte	0xe
+	.uleb128 0x10
+	.byte	0x86
+	.uleb128 0x2
+	.byte	0x4
+	.long	.LCFI1-.LCFI0
+	.byte	0xd
+	.uleb128 0x6
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+	.byte 0x0
+.LEFDE1:
--- ld/testsuite/ld-elf/eh3a.s.eh	2006-05-13 10:24:41.000000000 -0700
+++ ld/testsuite/ld-elf/eh3a.s	2006-05-13 10:24:30.000000000 -0700
@@ -0,0 +1,3 @@
+	.section	.eh_frame,"a",%progbits
+	.align	8
+	.zero	8

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section
  2006-05-15  3:19     ` H. J. Lu
@ 2006-05-24 12:16       ` Alan Modra
  0 siblings, 0 replies; 5+ messages in thread
From: Alan Modra @ 2006-05-24 12:16 UTC (permalink / raw)
  To: H. J. Lu; +Cc: binutils, richard

On Sat, May 13, 2006 at 10:41:31AM -0700, H. J. Lu wrote:
> We shouldn't pad the .eh_frame section to its section alignment.

Where it was being done is too late anyway.  Patch OK.

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-05-24  2:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-13  1:07 Incorrect assumption on the CIE/FDE alignment H. J. Lu
2006-05-13 17:42 ` PATCH: PR ld/2655/2657: Incorrrect padding for .eh_frame section H. J. Lu
2006-05-15  2:03   ` H. J. Lu
2006-05-15  3:19     ` H. J. Lu
2006-05-24 12:16       ` Alan Modra

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).