aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitar Dimitrov <dimitar@dinux.eu>2023-05-04 12:41:55 +0100
committerNick Clifton <nickc@redhat.com>2023-05-04 12:41:55 +0100
commit35130e73da95371af99734cda3ef8915a6eb5e7a (patch)
tree6dc7f91caf687ddd562fd726f523c70acca4befe
parent654dfab0666513a4e9c053559d0c184b863139c4 (diff)
downloadbinutils-35130e73da95371af99734cda3ef8915a6eb5e7a.zip
binutils-35130e73da95371af99734cda3ef8915a6eb5e7a.tar.gz
binutils-35130e73da95371af99734cda3ef8915a6eb5e7a.tar.bz2
ld: pru: Place exception-handling sections correctly
* scripttempl/pru.sc (OUTPUT_SECTION_ALIGN): New helper variable to place at end of DMEM output sections. (.data): Use the helper variable. (.eh_frame): New output section. (.gnu_extab): Ditto. (.gcc_except_table): Ditto. (.resource_table): Use the helper variable.
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/scripttempl/pru.sc34
2 files changed, 36 insertions, 8 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f941b13..dcdf27c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+2023-05-04 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * scripttempl/pru.sc (OUTPUT_SECTION_ALIGN): New helper variable
+ to place at end of DMEM output sections.
+ (.data): Use the helper variable.
+ (.eh_frame): New output section.
+ (.gnu_extab): Ditto.
+ (.gcc_except_table): Ditto.
+ (.resource_table): Use the helper variable.
+
2023-04-27 Nick Clifton <nickc@redhat.com>
* ldmisc.c (vfinfo): Add support for %x and %lx.
diff --git a/ld/scripttempl/pru.sc b/ld/scripttempl/pru.sc
index 8531cb8..3ff86bc 100644
--- a/ld/scripttempl/pru.sc
+++ b/ld/scripttempl/pru.sc
@@ -24,6 +24,12 @@ ENTRY (_start)
EOF
+OUTPUT_SECTION_ALIGN="
+ ${RELOCATING+/* In case this is the last input section,
+ align to keep the loadable segment size a multiple of the common page size.
+ Some SoCs have stricter memory size requirements than others. */
+ . = ALIGN (CONSTANT (COMMONPAGESIZE));}"
+
cat <<EOF
SECTIONS
{
@@ -163,10 +169,25 @@ SECTIONS
${RELOCATING+*(COMMON)}
${RELOCATING+ PROVIDE (_bss_end = .) ; }
- ${RELOCATING+/* In case this is the last input section, align to
- keep the loadable segment size a multiple of the common page size.
- Some SoCs have stricter memory size requirements than others. */
- . = ALIGN (CONSTANT (COMMONPAGESIZE));}
+ ${OUTPUT_SECTION_ALIGN}
+ } ${RELOCATING+ > dmem}
+
+ .eh_frame ${RELOCATING-0} :
+ {
+ KEEP (*(.eh_frame))${RELOCATING+ *(.eh_frame.*)}
+ ${OUTPUT_SECTION_ALIGN}
+ } ${RELOCATING+ > dmem}
+
+ .gnu_extab ${RELOCATING-0} :
+ {
+ *(.gnu_extab)
+ ${OUTPUT_SECTION_ALIGN}
+ } ${RELOCATING+ > dmem}
+
+ .gcc_except_table ${RELOCATING-0} :
+ {
+ *(.gcc_except_table${RELOCATING+ .gcc_except_table.*})
+ ${OUTPUT_SECTION_ALIGN}
} ${RELOCATING+ > dmem}
/* Linux remoteproc loader requires the resource_table section
@@ -175,10 +196,7 @@ SECTIONS
.resource_table ${RELOCATING-0} ${RELOCATING+ ALIGN (CONSTANT (MAXPAGESIZE))} :
{
KEEP (*(.resource_table))
- ${RELOCATING+/* In case this is the last input section, align to
- keep the loadable segment size a multiple of the common page size.
- Some SoCs have stricter memory size requirements than others. */
- . = ALIGN (CONSTANT (COMMONPAGESIZE));}
+ ${OUTPUT_SECTION_ALIGN}
} ${RELOCATING+ > dmem}
/* Global data not cleared after reset. */