changeset 2902:c23173de14a8

Add support for a .eh_frame_hdr section
author bartv
date Mon, 17 Aug 2009 14:44:16 +0000
parents b64cee69f7e3
children 4fc5c84f2234
files packages/hal/synth/arch/current/ChangeLog packages/hal/synth/arch/current/src/synth.ld
diffstat 2 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/synth/arch/current/ChangeLog
+++ b/packages/hal/synth/arch/current/ChangeLog
@@ -1,3 +1,8 @@
+2009-08-13  Bart Veer  <bartv@ecoscentric.com>
+
+	* src/synth.ld (SECTION_eh_frame): allow for a .eh_frame_hdr
+	section.
+
 2009-02-07  John Dallaway  <john@dallaway.org.uk>
 
 	* cdl/hal_synth.cdl: Parent under the common HAL package as with
--- a/packages/hal/synth/arch/current/src/synth.ld
+++ b/packages/hal/synth/arch/current/src/synth.ld
@@ -8,7 +8,7 @@
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
 //
 // eCos is free software; you can redistribute it and/or modify it under    
 // the terms of the GNU General Public License as published by the Free     
@@ -108,13 +108,24 @@ GROUP(libtarget.a libgcc.a)
       _EXCEPT_END_ = ABSOLUTE(.);}                                      	\
     > _region_
 
-#define SECTION_eh_frame(_region_, _vma_, _lma_)      \
-  .eh_frame _vma_ : _lma_                             \
-    {                                                 \
-       FORCE_OUTPUT;  __EH_FRAME_BEGIN__ = .;         \
-       KEEP(*(.eh_frame*))                             \
-       __FRAME_END__ = .;                             \
-       . = . + 8;                                     \
+#define SECTION_eh_frame(_region_, _vma_, _lma_)                            \
+    . = _vma_ ;                                                             \
+    . = ALIGN(ALIGN_LMA) ;                                                  \
+    .eh_frame_hdr . : _lma_                                                 \
+    {                                                                       \
+       FORCE_OUTPUT;                                                        \
+       *(.eh_frame_hdr)                                                     \
+    } > _region_ = 0                                                        \
+    . = ALIGN(ALIGN_LMA) ;                                                  \
+    .eh_frame . : FOLLOWING(.eh_frame_hdr)                                  \
+    {                                                                       \
+       FORCE_OUTPUT;                                                        \
+       __EH_FRAME_BEGIN__ = .;                                              \
+       KEEP(*(.eh_frame))                                                   \
+       KEEP(*(.eh_frame*))                                                  \
+       __EH_FRAME_END__ = .;                                                \
+       . = ALIGN(4) ;                                                       \
+       . = . + 8;                                                           \
     } > _region_ = 0
 
 #define SECTION_RELOCS(_region_, _vma_, _lma_)                              \