+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.
 
 
 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
 {
     ${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
   .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.  */