Subject: Re: bin/33909: modload fails with "section .eh_frame ... overlaps
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org,>
From: Matthias Drochner <M.Drochner@fz-juelich.de>
List: netbsd-bugs
Date: 07/06/2006 12:20:02
The following reply was made to PR bin/33909; it has been noted by GNATS.
From: Matthias Drochner <M.Drochner@fz-juelich.de>
To: khym@azeotrope.org
Cc: gnats-bugs@NetBSD.org, gnats-admin@NetBSD.org,
netbsd-bugs@NetBSD.org
Subject: Re: bin/33909: modload fails with "section .eh_frame ... overlaps
section .data"
Date: Thu, 06 Jul 2006 14:18:18 +0200
This is a multipart MIME message.
--==_Exmh_5678686875280
Content-Type: text/plain; charset=us-ascii
khym@azeotrope.org said:
> .eh_frame: addr = 0xa430 size = 0x16c0 align = 0x8
> .data: addr = 0x10bb00 size = 0x190 align = 0x20
> .data section forced to offset 0xbb00 (was 0x10bb00)
My modload/elf.c patch wouldn't help here because .data
is already aligned as much as .text.
After some investigation I'm pretty sure the linker is
to blame. It does the overlap check too early. The
platform dependent "finish" function recalculates all
the sizes, so what gets checked is not the final result.
Could you try the appended fix?
(and discard the elf.c patch)
best regards
Matthias
--==_Exmh_5678686875280
Content-Type: text/plain ; name="ldchk.txt"; charset=us-ascii
Content-Description: ldchk.txt
Content-Disposition: attachment; filename="ldchk.txt"
Index: ldlang.c
===================================================================
RCS file: /cvsroot/src/gnu/dist/binutils/ld/ldlang.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 ldlang.c
--- ldlang.c 2 Feb 2006 21:18:10 -0000 1.1.1.3
+++ ldlang.c 6 Jul 2006 12:16:29 -0000
@@ -4876,14 +4876,15 @@ lang_process (void)
lang_do_assignments (statement_list.head, abs_output_section, NULL, 0);
+ /* Final stuffs. */
+
+ ldemul_finish ();
+
/* Make sure that the section addresses make sense. */
if (! link_info.relocatable
&& command_line.check_section_addresses)
lang_check_section_addresses ();
- /* Final stuffs. */
-
- ldemul_finish ();
lang_finish ();
}
--==_Exmh_5678686875280--