[rtems commit] libdl: Add C++ exception support to loaded modules.

Chris Johns chrisj at rtems.org
Tue Dec 13 22:34:10 UTC 2016


Module:    rtems
Branch:    master
Commit:    c6eead1353e03542e5bad9efda3b6553125520d8
Changeset: http://git.rtems.org/rtems/commit/?id=c6eead1353e03542e5bad9efda3b6553125520d8

Author:    Chris Johns <chrisj at rtems.org>
Date:      Wed Dec  7 17:20:38 2016 +1100

libdl: Add C++ exception support to loaded modules.

This has been tested on SPARC, i386, PowerPC and ARM.

Closes #2767.

---

 .../sparc/erc32/make/custom/erc32-testsuite.tcfg   |    4 -
 cpukit/libdl/Makefile.am                           |    1 +
 cpukit/libdl/dlfcn.c                               |    2 +-
 cpukit/libdl/rtl-allocator.c                       |   26 +-
 cpukit/libdl/rtl-allocator.h                       |    7 +-
 cpukit/libdl/rtl-debugger.c                        |   14 +-
 cpukit/libdl/rtl-elf.c                             |   94 +-
 cpukit/libdl/rtl-elf.h                             |   26 +-
 cpukit/libdl/rtl-error.c                           |   17 +-
 cpukit/libdl/rtl-mdreloc-arm.c                     |  121 +-
 cpukit/libdl/rtl-mdreloc-bfin.c                    |   29 +
 cpukit/libdl/rtl-mdreloc-h8300.c                   |   29 +
 cpukit/libdl/rtl-mdreloc-i386.c                    |   29 +
 cpukit/libdl/rtl-mdreloc-lm32.c                    |   29 +
 cpukit/libdl/rtl-mdreloc-m68k.c                    |   29 +
 cpukit/libdl/rtl-mdreloc-mips.c                    |   29 +
 cpukit/libdl/rtl-mdreloc-moxie.c                   |   29 +
 cpukit/libdl/rtl-mdreloc-powerpc.c                 |   43 +
 cpukit/libdl/rtl-mdreloc-sparc.c                   |   43 +-
 cpukit/libdl/rtl-mdreloc-v850.c                    |   29 +
 cpukit/libdl/rtl-obj.c                             |  178 +-
 cpukit/libdl/rtl-obj.h                             |  169 +-
 cpukit/libdl/rtl-rap.c                             |   55 +-
 cpukit/libdl/rtl-rap.h                             |    7 +
 cpukit/libdl/rtl-unwind-dw2.c                      |   71 +
 cpukit/libdl/rtl-unwind-dw2.h                      |   83 +
 cpukit/libdl/rtl-unwind.h                          |   63 +
 cpukit/libdl/rtl.c                                 |   33 +-
 cpukit/libdl/rtl.h                                 |    2 +-
 testsuites/libtests/dl01/init.c                    |    3 +-
 testsuites/libtests/dl02/init.c                    |    2 +
 testsuites/libtests/dl03/init.c                    |    2 +
 testsuites/libtests/dl04/init.c                    |    2 +
 testsuites/libtests/dl05/dl-cpp.cpp                |   24 +-
 testsuites/libtests/dl05/dl-load.c                 |   34 +-
 testsuites/libtests/dl05/dl-load.h                 |   30 +-
 testsuites/libtests/dl05/dl-o5.cpp                 |   15 +-
 testsuites/libtests/dl05/dl05.scn                  | 2545 +++++++++++---------
 testsuites/libtests/dl05/init.c                    |    8 +-
 39 files changed, 2522 insertions(+), 1434 deletions(-)

diff --git a/c/src/lib/libbsp/sparc/erc32/make/custom/erc32-testsuite.tcfg b/c/src/lib/libbsp/sparc/erc32/make/custom/erc32-testsuite.tcfg
deleted file mode 100644
index cee7ce5..0000000
--- a/c/src/lib/libbsp/sparc/erc32/make/custom/erc32-testsuite.tcfg
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# Excpected failures.
-#
-expected-fail: dl05
diff --git a/cpukit/libdl/Makefile.am b/cpukit/libdl/Makefile.am
index 5c3cd15..b21c167 100644
--- a/cpukit/libdl/Makefile.am
+++ b/cpukit/libdl/Makefile.am
@@ -25,6 +25,7 @@ libdl_a_SOURCES = \
   rtl-string.c \
   rtl-sym.c \
   rtl-trace.c \
+  rtl-unwind-dw2.c \
   rtl-unresolved.c
 
 libdl_a_SOURCES += rtl-mdreloc- at RTEMS_CPU@.c
diff --git a/cpukit/libdl/dlfcn.c b/cpukit/libdl/dlfcn.c
index 19feaaf..3b31bb2 100644
--- a/cpukit/libdl/dlfcn.c
+++ b/cpukit/libdl/dlfcn.c
@@ -130,7 +130,7 @@ dlerror (void)
 {
   static char msg[64];
   rtems_rtl_get_error (msg, sizeof (msg));
-	return msg;
+  return msg;
 }
 
 int
diff --git a/cpukit/libdl/rtl-allocator.c b/cpukit/libdl/rtl-allocator.c
index 9880940..39b4bcd 100644
--- a/cpukit/libdl/rtl-allocator.c
+++ b/cpukit/libdl/rtl-allocator.c
@@ -152,6 +152,7 @@ rtems_rtl_alloc_indirect_del (rtems_rtl_alloc_tag_t tag,
 bool
 rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
                             void** const_base, size_t const_size,
+                            void** eh_base, size_t eh_size,
                             void** data_base, size_t data_size,
                             void** bss_base, size_t bss_size)
 {
@@ -173,7 +174,20 @@ rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
                                        const_size, false);
     if (!*const_base)
     {
-      rtems_rtl_alloc_module_del (text_base, const_base, data_base, bss_base);
+      rtems_rtl_alloc_module_del (text_base, const_base, eh_base,
+                                  data_base, bss_base);
+      return false;
+    }
+  }
+
+  if (eh_size)
+  {
+    *eh_base = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_READ,
+                                    eh_size, false);
+    if (!*eh_base)
+    {
+      rtems_rtl_alloc_module_del (text_base, const_base, eh_base,
+                                  data_base, bss_base);
       return false;
     }
   }
@@ -184,7 +198,8 @@ rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
                                       data_size, false);
     if (!*data_base)
     {
-      rtems_rtl_alloc_module_del (text_base, const_base, data_base, bss_base);
+      rtems_rtl_alloc_module_del (text_base, const_base, eh_base,
+                                  data_base, bss_base);
       return false;
     }
   }
@@ -195,7 +210,8 @@ rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
                                      bss_size, false);
     if (!*bss_base)
     {
-      rtems_rtl_alloc_module_del (text_base, const_base, data_base, bss_base);
+      rtems_rtl_alloc_module_del (text_base, const_base, eh_base,
+                                  data_base, bss_base);
       return false;
     }
   }
@@ -206,12 +222,14 @@ rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
 void
 rtems_rtl_alloc_module_del (void** text_base,
                             void** const_base,
+                            void** eh_base,
                             void** data_base,
                             void** bss_base)
 {
   rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_READ_WRITE, *bss_base);
   rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_READ_WRITE, *data_base);
+  rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_READ, *eh_base);
   rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_READ, *const_base);
   rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_READ_EXEC, *text_base);
-  *text_base = *const_base = *data_base = *bss_base = NULL;
+  *text_base = *const_base = *eh_base = *data_base = *bss_base = NULL;
 }
diff --git a/cpukit/libdl/rtl-allocator.h b/cpukit/libdl/rtl-allocator.h
index 4d996d3..e8044ee 100644
--- a/cpukit/libdl/rtl-allocator.h
+++ b/cpukit/libdl/rtl-allocator.h
@@ -146,6 +146,8 @@ void rtems_rtl_alloc_indirect_del (rtems_rtl_alloc_tag_t tag,
  * @param text_size The size of the read/exec section.
  * @param const_base Pointer to the const base pointer.
  * @param const_size The size of the read only section.
+ * @param eh_base Pointer to the eh base pointer.
+ * @param eh_size The size of the eh section.
  * @param data_base Pointer to the data base pointer.
  * @param data_size The size of the read/write secton.
  * @param bss_base Pointer to the bss base pointer.
@@ -155,6 +157,7 @@ void rtems_rtl_alloc_indirect_del (rtems_rtl_alloc_tag_t tag,
  */
 bool rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
                                  void** const_base, size_t const_size,
+                                 void** eh_base, size_t eh_size,
                                  void** data_base, size_t data_size,
                                  void** bss_base, size_t bss_size);
 
@@ -163,11 +166,13 @@ bool rtems_rtl_alloc_module_new (void** text_base, size_t text_size,
  *
  * @param text_base Pointer to the text base pointer.
  * @param const_base Pointer to the const base pointer.
+ * @param eh_base Pointer to the eh base pointer.
  * @param data_base Pointer to the data base pointer.
  * @param bss_base Pointer to the bss base pointer.
  */
 void rtems_rtl_alloc_module_del (void** text_base, void** const_base,
-                                 void** data_base, void** bss_base);
+                                 void** eh_base, void** data_base,
+                                 void** bss_base);
 
 #ifdef __cplusplus
 }
diff --git a/cpukit/libdl/rtl-debugger.c b/cpukit/libdl/rtl-debugger.c
index 63add59..afbea8a 100644
--- a/cpukit/libdl/rtl-debugger.c
+++ b/cpukit/libdl/rtl-debugger.c
@@ -45,10 +45,10 @@ _rtld_debug_state (void)
 int
 _rtld_linkmap_add (rtems_rtl_obj_t* obj)
 {
-  struct link_map* l = (struct link_map*)obj->detail;
+  struct link_map* l = obj->linkmap;
   struct link_map* prev;
-  uint32_t obj_num = obj->obj_num;
-  int i;
+  uint32_t         obj_num = obj->obj_num;
+  int              i;
 
   if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
     printf ("rtl: linkmap_add\n");
@@ -78,8 +78,10 @@ _rtld_linkmap_add (rtems_rtl_obj_t* obj)
 void
 _rtld_linkmap_delete (rtems_rtl_obj_t* obj)
 {
-  struct link_map* l = (struct link_map*)obj->detail;
-  /* link_maps are allocated together if not 1 */
+  struct link_map* l = obj->linkmap;
+  /*
+   *  link_maps are allocated together if not 1
+   */
   struct link_map* e = l + obj->obj_num - 1;
 
   while (e && e->l_next) e = e->l_next;
@@ -90,7 +92,7 @@ _rtld_linkmap_delete (rtems_rtl_obj_t* obj)
       e->l_next->l_prev = NULL;
     return;
   }
+
   if ((l->l_prev->l_next = e->l_next) != NULL)
     e->l_next->l_prev = l->l_prev;
-  return;
 }
diff --git a/cpukit/libdl/rtl-elf.c b/cpukit/libdl/rtl-elf.c
index b686a48..37775ff 100644
--- a/cpukit/libdl/rtl-elf.c
+++ b/cpukit/libdl/rtl-elf.c
@@ -30,6 +30,7 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
 #include "rtl-unresolved.h"
 
 /**
@@ -169,6 +170,9 @@ rtems_rtl_elf_relocator (rtems_rtl_obj_t*      obj,
                                          &relbuf[0], reloc_size))
       return false;
 
+    /*
+     * Read the symbol details.
+     */
     if (is_rela)
       off = (obj->ooffset + symsect->offset +
              (ELF_R_SYM (rela->r_info) * sizeof (sym)));
@@ -246,7 +250,7 @@ rtems_rtl_elf_relocator (rtems_rtl_obj_t*      obj,
       if (is_rela)
       {
         if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
-          printf ("rtl: rela: sym:%s(%-2d)=%08lx type:%-2d off:%08lx addend:%d\n",
+          printf ("rtl: rela: sym:%s(%d)=%08lx type:%d off:%08lx addend:%d\n",
                   symname, (int) ELF_R_SYM (rela->r_info), symvalue,
                   (int) ELF_R_TYPE (rela->r_info), rela->r_offset, (int) rela->r_addend);
         if (!rtems_rtl_elf_relocate_rela (obj, rela, targetsect,
@@ -256,7 +260,7 @@ rtems_rtl_elf_relocator (rtems_rtl_obj_t*      obj,
       else
       {
         if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
-          printf ("rtl: rel: sym:%s(%-2d)=%08lx type:%-2d off:%08lx\n",
+          printf ("rtl: rel: sym:%s(%d)=%08lx type:%d off:%08lx\n",
                   symname, (int) ELF_R_SYM (rel->r_info), symvalue,
                   (int) ELF_R_TYPE (rel->r_info), rel->r_offset);
         if (!rtems_rtl_elf_relocate_rel (obj, rel, targetsect,
@@ -300,7 +304,7 @@ rtems_rtl_obj_relocate_unresolved (rtems_rtl_unresolv_reloc_t* reloc,
     rela.r_info = reloc->rel[REL_R_INFO];
     rela.r_addend = reloc->rel[REL_R_ADDEND];
     if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
-          printf ("rtl: rela: sym:%-2d type:%-2d off:%08lx addend:%d\n",
+          printf ("rtl: rela: sym:%d type:%d off:%08lx addend:%d\n",
                   (int) ELF_R_SYM (rela.r_info), (int) ELF_R_TYPE (rela.r_info),
                   rela.r_offset, (int) rela.r_addend);
     if (!rtems_rtl_elf_relocate_rela (reloc->obj, &rela, sect,
@@ -313,7 +317,7 @@ rtems_rtl_obj_relocate_unresolved (rtems_rtl_unresolv_reloc_t* reloc,
     rel.r_offset = reloc->rel[REL_R_OFFSET];
     rel.r_info = reloc->rel[REL_R_INFO];
     if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
-      printf ("rtl: rel: sym:%-2d type:%-2d off:%08lx\n",
+      printf ("rtl: rel: sym:%d type:%d off:%08lx\n",
               (int) ELF_R_SYM (rel.r_info), (int) ELF_R_TYPE (rel.r_info),
               rel.r_offset);
     if (!rtems_rtl_elf_relocate_rel (reloc->obj, &rel, sect,
@@ -707,9 +711,16 @@ rtems_rtl_elf_parse_sections (rtems_rtl_obj_t* obj, int fd, Elf_Ehdr* ehdr)
         break;
 
       default:
-        if (rtems_rtl_trace (RTEMS_RTL_TRACE_WARNING))
-          printf ("rtl: unsupported section: %2d: type=%02d flags=%02x\n",
-                  section, (int) shdr.sh_type, (int) shdr.sh_flags);
+        /*
+         * See there are architecture specific flags?
+         */
+        flags = rtems_rtl_elf_section_flags (obj, &shdr);
+        if (flags == 0)
+        {
+          if (rtems_rtl_trace (RTEMS_RTL_TRACE_WARNING))
+            printf ("rtl: unsupported section: %2d: type=%02d flags=%02x\n",
+                    section, (int) shdr.sh_type, (int) shdr.sh_flags);
+        }
         break;
     }
 
@@ -729,6 +740,12 @@ rtems_rtl_elf_parse_sections (rtems_rtl_obj_t* obj, int fd, Elf_Ehdr* ehdr)
       if (strcmp (".dtors", name) == 0)
         flags |= RTEMS_RTL_OBJ_SECT_DTOR;
 
+      if (rtems_rtl_elf_unwind_parse (obj, name, flags))
+      {
+        flags &= ~(RTEMS_RTL_OBJ_SECT_TEXT | RTEMS_RTL_OBJ_SECT_CONST);
+        flags |= RTEMS_RTL_OBJ_SECT_EH;
+      }
+
       if (!rtems_rtl_obj_add_section (obj, section, name,
                                       shdr.sh_size, shdr.sh_offset,
                                       shdr.sh_addralign, shdr.sh_link,
@@ -771,16 +788,19 @@ rtems_rtl_elf_file_check (rtems_rtl_obj_t* obj, int fd)
   return true;
 }
 
-bool rtems_rtl_elf_load_details (rtems_rtl_obj_t* obj)
+static bool
+rtems_rtl_elf_load_linkmap (rtems_rtl_obj_t* obj)
 {
   rtems_chain_control* sections = NULL;
   rtems_chain_node*    node = NULL;
   size_t               mask = 0;
-  struct link_map*     l = NULL;
   int                  sec_num = 0;
+  section_detail*      sd;
   int                  i = 0;
 
-  /* caculate the size of sections' name. */
+  /*
+   * Caculate the size of sections' name.
+   */
 
   for (mask = RTEMS_RTL_OBJ_SECT_TEXT;
        mask <= RTEMS_RTL_OBJ_SECT_BSS;
@@ -791,7 +811,6 @@ bool rtems_rtl_elf_load_details (rtems_rtl_obj_t* obj)
     while (!rtems_chain_is_tail (sections, node))
     {
       rtems_rtl_obj_sect_t* sect = (rtems_rtl_obj_sect_t*) node;
-
       if ((sect->size != 0) && ((sect->flags & mask) != 0))
       {
         ++sec_num;
@@ -801,32 +820,31 @@ bool rtems_rtl_elf_load_details (rtems_rtl_obj_t* obj)
   }
 
   obj->obj_num = 1;
-  obj->detail = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
-                                     sizeof(struct link_map) +
-                                     sec_num * sizeof (section_detail), true);
-  if (!obj->detail)
+  obj->linkmap = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
+                                      sizeof(struct link_map) +
+                                      sec_num * sizeof (section_detail), true);
+  if (!obj->linkmap)
   {
-    rtems_rtl_set_error (ENOMEM, "no memory for obj global syms");
+    rtems_rtl_set_error (ENOMEM, "no memory for obj linkmap");
     return false;
   }
 
-  l = (struct link_map*) obj->detail;
-  l->name = obj->oname;
-  l->sec_num = sec_num;
-  l->sec_detail = (section_detail*) (l + 1);
-  l->rpathlen = 0;
-  l->rpath = NULL;
-  l->l_next = NULL;
-  l->l_prev = NULL;
-  l->sec_addr[rap_text] = obj->text_base;
-  l->sec_addr[rap_const] = obj->const_base;
-  l->sec_addr[rap_data] = obj->data_base;
-  l->sec_addr[rap_bss] = obj->bss_base;
-
-
-  section_detail* sd = l->sec_detail;
+  obj->linkmap->name = obj->oname;
+  obj->linkmap->sec_num = sec_num;
+  obj->linkmap->sec_detail = (section_detail*) (obj->linkmap + 1);
+  obj->linkmap->rpathlen = 0;
+  obj->linkmap->rpath = NULL;
+  obj->linkmap->l_next = NULL;
+  obj->linkmap->l_prev = NULL;
+  obj->linkmap->sec_addr[rap_text] = obj->text_base;
+  obj->linkmap->sec_addr[rap_const] = obj->const_base;
+  obj->linkmap->sec_addr[rap_data] = obj->data_base;
+  obj->linkmap->sec_addr[rap_bss] = obj->bss_base;
+
+  sd = obj->linkmap->sec_detail;
   sections = &obj->sections;
   node = rtems_chain_first (sections);
+
   for (mask = RTEMS_RTL_OBJ_SECT_TEXT;
        mask <= RTEMS_RTL_OBJ_SECT_BSS;
        mask <<= 1)
@@ -948,7 +966,12 @@ rtems_rtl_elf_file_load (rtems_rtl_obj_t* obj, int fd)
 
   rtems_rtl_symbol_obj_erase_local (obj);
 
-  if (!rtems_rtl_elf_load_details (obj))
+  if (!rtems_rtl_elf_load_linkmap (obj))
+  {
+    return false;
+  }
+
+  if (!rtems_rtl_elf_unwind_register (obj))
   {
     return false;
   }
@@ -956,6 +979,13 @@ rtems_rtl_elf_file_load (rtems_rtl_obj_t* obj, int fd)
   return true;
 }
 
+bool
+rtems_rtl_elf_file_unload (rtems_rtl_obj_t* obj)
+{
+  rtems_rtl_elf_unwind_deregister (obj);
+  return true;
+}
+
 rtems_rtl_loader_format_t*
 rtems_rtl_elf_file_sig (void)
 {
diff --git a/cpukit/libdl/rtl-elf.h b/cpukit/libdl/rtl-elf.h
index 7f6ea30..e3ac07f 100644
--- a/cpukit/libdl/rtl-elf.h
+++ b/cpukit/libdl/rtl-elf.h
@@ -55,6 +55,18 @@ extern "C" {
 #define RTEMS_RTL_ELF_STRING_MAX (256)
 
 /**
+ * Architecture specific handler to translate unknown section flags to RTL
+ * section flags.
+ *
+ * @param obj The object file being relocated.
+ * @param shdr The ELF section header.
+ * @retval 0 Unknown or unsupported flags.
+ * @retval uint32_t RTL object file flags.
+ */
+uint32_t rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                                      const Elf_Shdr*        shdr);
+
+/**
  * Architecture specific handler to check is a relocation record's type is
  * required to resolve a symbol.
  *
@@ -137,13 +149,6 @@ bool rtems_rtl_elf_find_symbol (rtems_rtl_obj_t* obj,
 bool rtems_rtl_elf_file_check (rtems_rtl_obj_t* obj, int fd);
 
 /**
- * The ELF file details handler.
- *
- * @param obj Load the details of the obj.
- */
-bool rtems_rtl_elf_load_details (rtems_rtl_obj_t* obj);
-
-/**
  * The ELF format load handler.
  *
  * @param obj The object to load.
@@ -152,6 +157,13 @@ bool rtems_rtl_elf_load_details (rtems_rtl_obj_t* obj);
 bool rtems_rtl_elf_file_load (rtems_rtl_obj_t* obj, int fd);
 
 /**
+ * The ELF format unload handler.
+ *
+ * @param obj The object to unload.
+ */
+bool rtems_rtl_elf_file_unload (rtems_rtl_obj_t* obj);
+
+/**
  * The ELF format signature handler.
  *
  * @return rtems_rtl_loader_format_t* The format's signature.
diff --git a/cpukit/libdl/rtl-error.c b/cpukit/libdl/rtl-error.c
index 3251fa5..5ec4b26 100644
--- a/cpukit/libdl/rtl-error.c
+++ b/cpukit/libdl/rtl-error.c
@@ -17,6 +17,7 @@
 #include "config.h"
 #endif
 
+#include <errno.h>
 #include <stdio.h>
 #include <stdarg.h>
 
@@ -39,9 +40,15 @@ int
 rtems_rtl_get_error (char* message, size_t max_message)
 {
   rtems_rtl_data_t* rtl = rtems_rtl_lock ();
-  int               last_errno = rtl->last_errno;
-  strncpy (message, rtl->last_error, sizeof (rtl->last_error));
-  rtems_rtl_unlock ();
-  return last_errno;
-}
+  if (rtl != NULL)
+  {
+    int last_errno = rtl->last_errno;
+    strncpy (message, rtl->last_error, sizeof (rtl->last_error));
+    rtems_rtl_unlock ();
+    return last_errno;
+  }
 
+  strncpy(message, "RTL init error", max_message);
+
+  return EIO;
+}
diff --git a/cpukit/libdl/rtl-mdreloc-arm.c b/cpukit/libdl/rtl-mdreloc-arm.c
index 84d58e3..f2f91f1 100644
--- a/cpukit/libdl/rtl-mdreloc-arm.c
+++ b/cpukit/libdl/rtl-mdreloc-arm.c
@@ -10,11 +10,14 @@
 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <unwind.h>
+#include <unwind-arm-common.h>
 
 #include <rtems/rtl/rtl.h>
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
 
 /*
  * It is possible for the compiler to emit relocations for unaligned data.
@@ -23,6 +26,8 @@
 #define	RELOC_ALIGNED_P(x) \
 	(((uintptr_t)(x) & (sizeof(void *) - 1)) == 0)
 
+#define SHT_ARM_EXIDX  0x70000001 /* Section holds ARM unwind info. */
+
 static inline Elf_Addr
 load_ptr(void *where)
 {
@@ -56,9 +61,18 @@ static inline Elf_SOff
 sign_extend31(Elf_Addr val)
 {
   if (0x40000000 & val)
-    return ~((Elf_Addr)0x7fffffff) | (0x7fffffff & val);
-  else
-    return 0x7fffffff & val;
+    val =  ~((Elf_Addr)0x7fffffff) | (0x7fffffff & val);
+  return 0x7fffffff & val;
+}
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  uint32_t flags = 0;
+  if (shdr->sh_type == SHT_ARM_EXIDX)
+    flags = RTEMS_RTL_OBJ_SECT_EH | RTEMS_RTL_OBJ_SECT_LOAD;
+  return flags;
 }
 
 bool
@@ -96,8 +110,11 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   where = (Elf_Addr *)(sect->base + rel->r_offset);
 
   switch (ELF_R_TYPE(rel->r_info)) {
-		case R_TYPE(NONE):
-			break;
+    case R_TYPE(NONE):
+      if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC)) {
+        printf ("rtl: NONE %p in %s\n", where, rtems_rtl_obj_oname (obj));
+      }
+      break;
 
     case R_TYPE(CALL):    /* BL/BLX */
     case R_TYPE(JUMP24):  /* B/BL<cond> */
@@ -175,29 +192,31 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
     case R_TYPE(ABS32):     /* word32 (S + A) | T */
     case R_TYPE(GLOB_DAT):  /* word32 (S + A) | T */
     case R_TYPE(PREL31):    /* word32 (S + A) | T - P */
-    case R_TYPE(TARGET2):   /* Equivalent to ABS32 */
+    case R_TYPE(TARGET2):   /* Equivalent to REL32 */
       if (__predict_true(RELOC_ALIGNED_P(where))) {
         tmp = *where + symvalue;
         if (isThumb(symvalue))
           tmp |= 1;
-        if (ELF_R_TYPE(rel->r_info) == R_TYPE(REL32))
+        if (ELF_R_TYPE(rel->r_info) == R_TYPE(REL32) ||
+            ELF_R_TYPE(rel->r_info) == R_TYPE(TARGET2))
           tmp -= (Elf_Addr)where;
         else if (ELF_R_TYPE(rel->r_info) == R_TYPE(PREL31))
-          tmp -= sign_extend31((Elf_Addr)where);
+          tmp = sign_extend31(tmp - (Elf_Addr)where);
         *where = tmp;
       } else {
         tmp = load_ptr(where) + symvalue;
         if (isThumb(symvalue))
           tmp |= 1;
-        if (ELF_R_TYPE(rel->r_info) == R_TYPE(REL32))
+        if (ELF_R_TYPE(rel->r_info) == R_TYPE(REL32) ||
+            ELF_R_TYPE(rel->r_info) == R_TYPE(TARGET2))
           tmp -= (Elf_Addr)where;
         else if (ELF_R_TYPE(rel->r_info) == R_TYPE(PREL31))
-          tmp -= sign_extend31((Elf_Addr)where);
+          tmp = sign_extend31(tmp - (Elf_Addr)where);
         store_ptr(where, tmp);
       }
 
       if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
-        printf ("rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 %p @ %p in %s",
+        printf ("rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 %p @ %p in %s\n",
                 (void *)tmp, where, rtems_rtl_obj_oname (obj));
       break;
 
@@ -321,7 +340,7 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
                 (void *)*where, where, rtems_rtl_obj_oname (obj));
       break;
 
-		default:
+    default:
       printf ("rtl: reloc unknown: sym = %lu, type = %lu, offset = %p, "
               "contents = %p\n",
               ELF_R_SYM(rel->r_info), (uint32_t) ELF_R_TYPE(rel->r_info),
@@ -330,9 +349,83 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
                            "%s: Unsupported relocation type %ld "
                            "in non-PLT relocations",
                            sect->name, (uint32_t) ELF_R_TYPE(rel->r_info));
-			return false;
+      return false;
   }
 
-	return true;
+  return true;
+}
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  /*
+   * We location the EH sections in section flags.
+   */
+  return false;
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return true;
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  obj->loader = NULL;
+  return true;
 }
 
+/* An exception index table entry.  */
+typedef struct __EIT_entry
+{
+  _uw fnoffset;
+  _uw content;
+} __EIT_entry;
+
+/* The exception index table location in the base module */
+extern __EIT_entry __exidx_start;
+extern __EIT_entry __exidx_end;
+
+/*
+ * A weak reference is in libgcc, provide a real version and provide a way to
+ * manage loaded modules.
+ *
+ * Passed in the return address and a reference to the number of records
+ * found. We set the start of the exidx data and the number of records.
+ */
+_Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
+                                     int*        nrec) __attribute__ ((__noinline__,
+                                                                       __used__,
+                                                                       __noclone__));
+
+_Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
+                                     int*        nrec)
+{
+  rtems_rtl_data_t* rtl;
+  rtems_chain_node* node;
+  __EIT_entry*      exidx_start = &__exidx_start;
+  __EIT_entry*      exidx_end = &__exidx_end;
+
+  rtl = rtems_rtl_lock ();
+
+  node = rtems_chain_first (&rtl->objects);
+  while (!rtems_chain_is_tail (&rtl->objects, node)) {
+    rtems_rtl_obj_t* obj = (rtems_rtl_obj_t*) node;
+    if (rtems_rtl_obj_text_inside (obj, (void*) return_address)) {
+      exidx_start = (__EIT_entry*) obj->eh_base;
+      exidx_end = (__EIT_entry*) (obj->eh_base + obj->eh_size);
+      break;
+    }
+    node = rtems_chain_next (node);
+  }
+
+  rtems_rtl_unlock ();
+
+  *nrec = exidx_end - exidx_start;
+
+  return (_Unwind_Ptr) exidx_start;
+}
diff --git a/cpukit/libdl/rtl-mdreloc-bfin.c b/cpukit/libdl/rtl-mdreloc-bfin.c
index d855d30..5a1fd26 100644
--- a/cpukit/libdl/rtl-mdreloc-bfin.c
+++ b/cpukit/libdl/rtl-mdreloc-bfin.c
@@ -6,6 +6,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -113,3 +122,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rel type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-h8300.c b/cpukit/libdl/rtl-mdreloc-h8300.c
index 925601b..0ef717b 100644
--- a/cpukit/libdl/rtl-mdreloc-h8300.c
+++ b/cpukit/libdl/rtl-mdreloc-h8300.c
@@ -9,6 +9,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -99,3 +108,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rel type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-i386.c b/cpukit/libdl/rtl-mdreloc-i386.c
index b6dd9b7..c8f1e11 100644
--- a/cpukit/libdl/rtl-mdreloc-i386.c
+++ b/cpukit/libdl/rtl-mdreloc-i386.c
@@ -15,6 +15,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -101,3 +110,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
 
   return true;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-lm32.c b/cpukit/libdl/rtl-mdreloc-lm32.c
index 057d6ce..e7e2a4c 100644
--- a/cpukit/libdl/rtl-mdreloc-lm32.c
+++ b/cpukit/libdl/rtl-mdreloc-lm32.c
@@ -9,6 +9,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -118,3 +127,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rela type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-m68k.c b/cpukit/libdl/rtl-mdreloc-m68k.c
index 36692eb..8a91ebc 100644
--- a/cpukit/libdl/rtl-mdreloc-m68k.c
+++ b/cpukit/libdl/rtl-mdreloc-m68k.c
@@ -15,6 +15,8 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
 
 static inline int overflow_8_check(int value)
 {
@@ -30,6 +32,13 @@ static inline int overflow_16_check(int value)
   return false;
 }
 
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
+
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
 {
@@ -146,3 +155,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rel type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-mips.c b/cpukit/libdl/rtl-mdreloc-mips.c
index c17dbc2..7ceac54 100644
--- a/cpukit/libdl/rtl-mdreloc-mips.c
+++ b/cpukit/libdl/rtl-mdreloc-mips.c
@@ -9,6 +9,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -188,3 +197,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
 
   return true;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-moxie.c b/cpukit/libdl/rtl-mdreloc-moxie.c
index 1fb05e6..27b0cf6 100644
--- a/cpukit/libdl/rtl-mdreloc-moxie.c
+++ b/cpukit/libdl/rtl-mdreloc-moxie.c
@@ -10,6 +10,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -86,3 +95,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rel type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-powerpc.c b/cpukit/libdl/rtl-mdreloc-powerpc.c
index 6909167..43c0b83 100644
--- a/cpukit/libdl/rtl-mdreloc-powerpc.c
+++ b/cpukit/libdl/rtl-mdreloc-powerpc.c
@@ -15,11 +15,19 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
 
 #define ha(x) ((((u_int32_t)(x) & 0x8000) ? \
                  ((u_int32_t)(x) + 0x10000) : (u_int32_t)(x)) >> 16)
 #define l(x) ((u_int32_t)(x) & 0xffff)
 
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -158,6 +166,21 @@ rtems_rtl_elf_relocate_rela (const rtems_rtl_obj_t*      obj,
                 (void *)*where, where, rtems_rtl_obj_oname (obj));
       break;
 
+    case R_TYPE(SDAREL16):
+      /*
+       * A sign-extended 16 bit value relative to _SDA_BASE_, for use with
+       * small data items.
+       */
+      mask = 0xffff;
+      tmp = *((Elf32_Half*) where);
+      tmp &= ~mask;
+      tmp |= (symvalue + rela->r_addend - (Elf_Addr)where) & mask;
+      *((Elf32_Half*) where) = tmp;
+      if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
+        printf ("rtl: SDAREL16 %p @ %p in %s\n",
+                (void *) *((Elf32_Half*) where), where, rtems_rtl_obj_oname (obj));
+      break;
+
     default:
       printf ("rtl: reloc unknown: sym = %lu, type = %lu, offset = %p, "
               "contents = %p\n",
@@ -183,3 +206,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   printf ("rtl: rel type record not supported; please report\n");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-sparc.c b/cpukit/libdl/rtl-mdreloc-sparc.c
index 509b62f..38b3850 100644
--- a/cpukit/libdl/rtl-mdreloc-sparc.c
+++ b/cpukit/libdl/rtl-mdreloc-sparc.c
@@ -41,6 +41,8 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
 
 /*
  * The following table holds for each relocation type:
@@ -128,6 +130,13 @@ static const int reloc_target_bitmask[] = {
 };
 #define RELOC_VALUE_BITMASK(t)  (reloc_target_bitmask[t])
 
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
+
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
 {
@@ -220,21 +229,22 @@ rtems_rtl_elf_relocate_rela (const rtems_rtl_obj_t*      obj,
   value &= mask;
 
   if (RELOC_UNALIGNED(type)) {
-    /* Handle unaligned relocations. */
-    char *ptr = (char *)where;
+    /*
+     * Handle unaligned relocations.
+     */
+    char *ptr = (char*) where;
     int i, size = RELOC_TARGET_SIZE (type) / 8;
 
     /* Read it in one byte at a time. */
-    for (i=0; i<size; i++)
+    for (i = size - 1; i >= 0; i--)
       tmp = (tmp << 8) | ptr[i];
 
     tmp &= ~mask;
     tmp |= value;
 
     /* Write it back out. */
-    for (i=0; i<size; i++)
-      ptr[i] = ((tmp >> (8*i)) & 0xff);
-
+    for (i = size - 1; i >= 0; i--, tmp >>= 8)
+      ptr[i] = tmp & 0xff;
   } else {
     *where &= ~mask;
     *where |= value;
@@ -245,7 +255,6 @@ rtems_rtl_elf_relocate_rela (const rtems_rtl_obj_t*      obj,
     printf ("rtl: %s %p @ %p in %s\n",
             reloc_names[type], (void *)tmp, where, rtems_rtl_obj_oname (obj));
 
-
   return true;
 }
 
@@ -260,3 +269,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   printf ("rtl: rel type record not supported; please report\n");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-mdreloc-v850.c b/cpukit/libdl/rtl-mdreloc-v850.c
index 5372e81..7f958a5 100644
--- a/cpukit/libdl/rtl-mdreloc-v850.c
+++ b/cpukit/libdl/rtl-mdreloc-v850.c
@@ -10,6 +10,15 @@
 #include "rtl-elf.h"
 #include "rtl-error.h"
 #include "rtl-trace.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+uint32_t
+rtems_rtl_elf_section_flags (const rtems_rtl_obj_t* obj,
+                             const Elf_Shdr*        shdr)
+{
+  return 0;
+}
 
 bool
 rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
@@ -95,3 +104,23 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,
   rtems_rtl_set_error (EINVAL, "rel type record not supported");
   return false;
 }
+
+bool
+rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                            const char*            name,
+                            uint32_t               flags)
+{
+  return rtems_rtl_elf_unwind_dw2_parse (obj, name, flags);
+}
+
+bool
+rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_register (obj);
+}
+
+bool
+rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_elf_unwind_dw2_deregister (obj);
+}
diff --git a/cpukit/libdl/rtl-obj.c b/cpukit/libdl/rtl-obj.c
index bdcebce..b27f28b 100644
--- a/cpukit/libdl/rtl-obj.c
+++ b/cpukit/libdl/rtl-obj.c
@@ -49,14 +49,21 @@
 /**
  * The table of supported loader formats.
  */
-static rtems_rtl_loader_table_t loaders[RTEMS_RTL_ELF_LOADER_COUNT +
-                                        RTEMS_RTL_RAP_LOADER_COUNT] =
+#define RTEMS_RTL_LOADERS (RTEMS_RTL_ELF_LOADER_COUNT + RTEMS_RTL_RAP_LOADER_COUNT)
+static const rtems_rtl_loader_table_t loaders[RTEMS_RTL_LOADERS] =
 {
 #if RTEMS_RTL_RAP_LOADER
-  { rtems_rtl_rap_file_check, rtems_rtl_rap_file_load, rtems_rtl_rap_file_sig },
+  { .check     = rtems_rtl_rap_file_check,
+    .load      = rtems_rtl_rap_file_load,
+    .unload    = rtems_rtl_rap_file_unload,
+    .unload    = rtems_rtl_rap_file_unload,
+    .signature = rtems_rtl_rap_file_sig },
 #endif
 #if RTEMS_RTL_ELF_LOADER
-  { rtems_rtl_elf_file_check, rtems_rtl_elf_file_load, rtems_rtl_elf_file_sig },
+  { .check     = rtems_rtl_elf_file_check,
+    .load      = rtems_rtl_elf_file_load,
+    .unload    = rtems_rtl_elf_file_unload,
+    .signature = rtems_rtl_elf_file_sig },
 #endif
 };
 
@@ -72,6 +79,10 @@ rtems_rtl_obj_alloc (void)
      * Initialise the chains.
      */
     rtems_chain_initialize_empty (&obj->sections);
+    /*
+     * No valid format.
+     */
+    obj->format = -1;
   }
   return obj;
 }
@@ -97,14 +108,14 @@ rtems_rtl_obj_free (rtems_rtl_obj_t* obj)
   }
   if (!rtems_chain_is_node_off_chain (&obj->link))
     rtems_chain_extract (&obj->link);
-  rtems_rtl_alloc_module_del (&obj->text_base, &obj->const_base,
+  rtems_rtl_alloc_module_del (&obj->text_base, &obj->const_base, &obj->eh_base,
                               &obj->data_base, &obj->bss_base);
   rtems_rtl_symbol_obj_erase (obj);
   rtems_rtl_obj_free_names (obj);
   if (obj->sec_num)
     free (obj->sec_num);
-  if (obj->detail)
-    rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_OBJECT, (void*)obj->detail);
+  if (obj->linkmap)
+    rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_OBJECT, (void*) obj->linkmap);
   rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_OBJECT, obj);
   return true;
 }
@@ -238,7 +249,7 @@ rtems_rtl_scan_decimal (const uint8_t* string, size_t len)
 static size_t
 rtems_rtl_sect_align (size_t offset, uint32_t alignment)
 {
-  if ((alignment > 1) && ((offset & ~alignment) != 0))
+  if ((alignment > 1) && ((offset & (alignment - 1)) != 0))
     offset = (offset + alignment) & ~(alignment - 1);
   return offset;
 }
@@ -264,12 +275,12 @@ rtems_rtl_obj_sect_summer (rtems_chain_node* node, void* data)
 }
 
 static size_t
-rtems_rtl_obj_section_size (rtems_rtl_obj_t* obj, uint32_t mask)
+rtems_rtl_obj_section_size (const rtems_rtl_obj_t* obj, uint32_t mask)
 {
   rtems_rtl_obj_sect_summer_t summer;
   summer.mask = mask;
   summer.size = 0;
-  rtems_rtl_chain_iterate (&obj->sections,
+  rtems_rtl_chain_iterate ((rtems_chain_control*) &obj->sections,
                            rtems_rtl_obj_sect_summer,
                            &summer);
   return summer.size;
@@ -302,12 +313,12 @@ rtems_rtl_obj_sect_aligner (rtems_chain_node* node, void* data)
 }
 
 static size_t
-rtems_rtl_obj_section_alignment (rtems_rtl_obj_t* obj, uint32_t mask)
+rtems_rtl_obj_section_alignment (const rtems_rtl_obj_t* obj, uint32_t mask)
 {
   rtems_rtl_obj_sect_aligner_t aligner;
   aligner.mask = mask;
   aligner.alignment = 0;
-  rtems_rtl_chain_iterate (&obj->sections,
+  rtems_rtl_chain_iterate ((rtems_chain_control*) &obj->sections,
                            rtems_rtl_obj_sect_aligner,
                            &aligner);
   return aligner.alignment;
@@ -401,26 +412,30 @@ rtems_rtl_obj_add_section (rtems_rtl_obj_t* obj,
                            int              info,
                            uint32_t         flags)
 {
-  rtems_rtl_obj_sect_t* sect = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
-                                                    sizeof (rtems_rtl_obj_sect_t), true);
-  if (!sect)
+  if (size > 0)
   {
-    rtems_rtl_set_error (ENOMEM, "adding allocated section");
-    return false;
+    rtems_rtl_obj_sect_t* sect = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
+                                                      sizeof (rtems_rtl_obj_sect_t),
+                                                      true);
+    if (!sect)
+    {
+      rtems_rtl_set_error (ENOMEM, "adding allocated section");
+      return false;
+    }
+    sect->section = section;
+    sect->name = rtems_rtl_strdup (name);
+    sect->size = size;
+    sect->offset = offset;
+    sect->alignment = alignment;
+    sect->link = link;
+    sect->info = info;
+    sect->flags = flags;
+    sect->base = NULL;
+    rtems_chain_append (&obj->sections, &sect->node);
+
+    if (rtems_rtl_trace (RTEMS_RTL_TRACE_SECTION))
+      printf ("rtl: sect: %-2d: %s (%zu)\n", section, name, size);
   }
-  sect->section = section;
-  sect->name = rtems_rtl_strdup (name);
-  sect->size = size;
-  sect->offset = offset;
-  sect->alignment = alignment;
-  sect->link = link;
-  sect->info = info;
-  sect->flags = flags;
-  sect->base = NULL;
-  rtems_chain_append (&obj->sections, &sect->node);
-
-  if (rtems_rtl_trace (RTEMS_RTL_TRACE_SECTION))
-    printf ("rtl: sect: %-2d: %s\n", section, name);
 
   return true;
 }
@@ -464,12 +479,13 @@ rtems_rtl_obj_sect_match_name (rtems_chain_node* node, void* data)
 }
 
 rtems_rtl_obj_sect_t*
-rtems_rtl_obj_find_section (rtems_rtl_obj_t* obj, const char* name)
+rtems_rtl_obj_find_section (const rtems_rtl_obj_t* obj,
+                            const char*            name)
 {
   rtems_rtl_obj_sect_finder_t match;
   match.sect = NULL;
   match.name = name;
-  rtems_rtl_chain_iterate (&obj->sections,
+  rtems_rtl_chain_iterate ((rtems_chain_control*) &obj->sections,
                            rtems_rtl_obj_sect_match_name,
                            &match);
   return match.sect;
@@ -489,61 +505,74 @@ rtems_rtl_obj_sect_match_index (rtems_chain_node* node, void* data)
 }
 
 rtems_rtl_obj_sect_t*
-rtems_rtl_obj_find_section_by_index (rtems_rtl_obj_t* obj, int index)
+rtems_rtl_obj_find_section_by_index (const rtems_rtl_obj_t* obj,
+                                     int                    index)
 {
   rtems_rtl_obj_sect_finder_t match;
   match.sect = NULL;
   match.index = index;
-  rtems_rtl_chain_iterate (&obj->sections,
+  rtems_rtl_chain_iterate ((rtems_chain_control*) &obj->sections,
                            rtems_rtl_obj_sect_match_index,
                            &match);
   return match.sect;
 }
 
 size_t
-rtems_rtl_obj_text_size (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_text_size (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_size (obj, RTEMS_RTL_OBJ_SECT_TEXT);
 }
 
 uint32_t
-rtems_rtl_obj_text_alignment (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_text_alignment (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_alignment (obj, RTEMS_RTL_OBJ_SECT_TEXT);
 }
 
 size_t
-rtems_rtl_obj_const_size (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_const_size (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_size (obj, RTEMS_RTL_OBJ_SECT_CONST);
 }
 
 uint32_t
-rtems_rtl_obj_const_alignment (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_eh_alignment (const rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_obj_section_alignment (obj, RTEMS_RTL_OBJ_SECT_EH);
+}
+
+size_t
+rtems_rtl_obj_eh_size (const rtems_rtl_obj_t* obj)
+{
+  return rtems_rtl_obj_section_size (obj, RTEMS_RTL_OBJ_SECT_EH);
+}
+
+uint32_t
+rtems_rtl_obj_const_alignment (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_alignment (obj, RTEMS_RTL_OBJ_SECT_CONST);
 }
 
 size_t
-rtems_rtl_obj_data_size (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_data_size (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_size (obj, RTEMS_RTL_OBJ_SECT_DATA);
 }
 
 uint32_t
-rtems_rtl_obj_data_alignment (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_data_alignment (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_alignment (obj, RTEMS_RTL_OBJ_SECT_DATA);
 }
 
 size_t
-rtems_rtl_obj_bss_size (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_bss_size (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_size (obj, RTEMS_RTL_OBJ_SECT_BSS);
 }
 
 uint32_t
-rtems_rtl_obj_bss_alignment (rtems_rtl_obj_t* obj)
+rtems_rtl_obj_bss_alignment (const rtems_rtl_obj_t* obj)
 {
   return rtems_rtl_obj_section_alignment (obj, RTEMS_RTL_OBJ_SECT_BSS);
 }
@@ -580,13 +609,17 @@ rtems_rtl_obj_sect_sync_handler (rtems_chain_node* node, void* data)
   if ( !(sect->flags & sync_ctx->mask) || !sect->size)
     return true;
 
-  if (sync_ctx->end_va == sync_ctx->start_va) {
+  if (sync_ctx->end_va == sync_ctx->start_va)
+  {
     sync_ctx->start_va = sect->base;
-  } else {
-    old_end = (uintptr_t)sync_ctx->end_va & ~(sync_ctx->cache_line_size - 1);
-    new_start = (uintptr_t)sect->base & ~(sync_ctx->cache_line_size - 1);
-    if ( (sect->base <  sync_ctx->start_va) ||
-         (new_start - old_end > sync_ctx->cache_line_size) ) {
+  }
+  else
+  {
+    old_end = (uintptr_t) sync_ctx->end_va & ~(sync_ctx->cache_line_size - 1);
+    new_start = (uintptr_t) sect->base & ~(sync_ctx->cache_line_size - 1);
+    if ((sect->base <  sync_ctx->start_va) ||
+        (new_start - old_end > sync_ctx->cache_line_size))
+    {
       rtems_cache_instruction_sync_after_code_change(sync_ctx->start_va,
                              sync_ctx->end_va - sync_ctx->start_va + 1);
       sync_ctx->start_va = sect->base;
@@ -658,8 +691,8 @@ rtems_rtl_obj_sections_loader (uint32_t                     mask,
       sect->base = base + base_offset;
 
       if (rtems_rtl_trace (RTEMS_RTL_TRACE_LOAD_SECT))
-        printf ("rtl: loading: %s -> %8p (%zi)\n",
-                sect->name, sect->base, sect->size);
+        printf ("rtl: loading: %s -> %8p (l:%zi m:%04lx)\n",
+                sect->name, sect->base, sect->size, sect->flags);
 
       if ((sect->flags & RTEMS_RTL_OBJ_SECT_LOAD) == RTEMS_RTL_OBJ_SECT_LOAD)
       {
@@ -698,20 +731,30 @@ rtems_rtl_obj_load_sections (rtems_rtl_obj_t*             obj,
 {
   size_t text_size;
   size_t const_size;
+  size_t eh_size;
   size_t data_size;
   size_t bss_size;
 
   text_size  = rtems_rtl_obj_text_size (obj) + rtems_rtl_obj_const_alignment (obj);
-  const_size = rtems_rtl_obj_const_size (obj) + rtems_rtl_obj_data_alignment (obj);
+  const_size = rtems_rtl_obj_const_size (obj) + rtems_rtl_obj_eh_alignment (obj);
+  eh_size    = rtems_rtl_obj_eh_size (obj) + rtems_rtl_obj_data_alignment (obj);
   data_size  = rtems_rtl_obj_data_size (obj) + rtems_rtl_obj_bss_alignment (obj);
   bss_size   = rtems_rtl_obj_bss_size (obj);
 
   /*
+   * Set the sizes held in the object data. We need this for a fast reference.
+   */
+  obj->text_size = text_size;
+  obj->eh_size   = eh_size;
+  obj->bss_size  = bss_size;
+
+  /*
    * Let the allocator manage the actual allocation. The user can use the
    * standard heap or provide a specific allocator with memory protection.
    */
   if (!rtems_rtl_alloc_module_new (&obj->text_base, text_size,
                                    &obj->const_base, const_size,
+                                   &obj->eh_base, eh_size,
                                    &obj->data_base, data_size,
                                    &obj->bss_base, bss_size))
   {
@@ -728,6 +771,8 @@ rtems_rtl_obj_load_sections (rtems_rtl_obj_t*             obj,
             obj->text_base, text_size, rtems_rtl_obj_text_alignment (obj));
     printf ("rtl: load sect: const - b:%p s:%zi a:%" PRIu32 "\n",
             obj->const_base, const_size, rtems_rtl_obj_const_alignment (obj));
+    printf ("rtl: load sect: eh    - b:%p s:%zi a:%" PRIu32 "\n",
+            obj->eh_base, eh_size, rtems_rtl_obj_eh_alignment (obj));
     printf ("rtl: load sect: data  - b:%p s:%zi a:%" PRIu32 "\n",
             obj->data_base, data_size, rtems_rtl_obj_data_alignment (obj));
     printf ("rtl: load sect: bss   - b:%p s:%zi a:%" PRIu32 "\n",
@@ -742,12 +787,14 @@ rtems_rtl_obj_load_sections (rtems_rtl_obj_t*             obj,
                                       obj, fd, obj->text_base, handler, data) ||
       !rtems_rtl_obj_sections_loader (RTEMS_RTL_OBJ_SECT_CONST,
                                       obj, fd, obj->const_base, handler, data) ||
+      !rtems_rtl_obj_sections_loader (RTEMS_RTL_OBJ_SECT_EH,
+                                      obj, fd, obj->eh_base, handler, data) ||
       !rtems_rtl_obj_sections_loader (RTEMS_RTL_OBJ_SECT_DATA,
                                       obj, fd, obj->data_base, handler, data) ||
       !rtems_rtl_obj_sections_loader (RTEMS_RTL_OBJ_SECT_BSS,
                                       obj, fd, obj->bss_base, handler, data))
   {
-    rtems_rtl_alloc_module_del (&obj->text_base, &obj->const_base,
+    rtems_rtl_alloc_module_del (&obj->text_base, &obj->const_base, &obj->eh_base,
                                 &obj->data_base, &obj->bss_base);
     obj->exec_size = 0;
     return false;
@@ -972,7 +1019,7 @@ rtems_rtl_obj_archive_find (rtems_rtl_obj_t* obj, int fd)
              * name from the table and compare with the name we are after.
              */
 #define RTEMS_RTL_MAX_FILE_SIZE (256)
-            char  name[RTEMS_RTL_MAX_FILE_SIZE];
+            char name[RTEMS_RTL_MAX_FILE_SIZE];
 
             if (!rtems_rtl_seek_read (fd, extended_file_names + extended_off,
                                       RTEMS_RTL_MAX_FILE_SIZE, (uint8_t*) &name[0]))
@@ -1016,7 +1063,7 @@ rtems_rtl_obj_archive_find (rtems_rtl_obj_t* obj, int fd)
   return false;
 }
 
-bool
+static bool
 rtems_rtl_obj_file_load (rtems_rtl_obj_t* obj, int fd)
 {
   int l;
@@ -1024,13 +1071,24 @@ rtems_rtl_obj_file_load (rtems_rtl_obj_t* obj, int fd)
   for (l = 0; l < (sizeof (loaders) / sizeof (rtems_rtl_loader_table_t)); ++l)
   {
     if (loaders[l].check (obj, fd))
+    {
+      obj->format = l;
       return loaders[l].load (obj, fd);
+    }
   }
 
   rtems_rtl_set_error (ENOENT, "no format loader found");
   return false;
 }
 
+static bool
+rtems_rtl_obj_file_unload (rtems_rtl_obj_t* obj)
+{
+  if (obj->format >= 0 && obj->format < RTEMS_RTL_LOADERS)
+      return loaders[obj->format].unload (obj);
+  return false;
+}
+
 bool
 rtems_rtl_obj_load (rtems_rtl_obj_t* obj)
 {
@@ -1057,20 +1115,16 @@ rtems_rtl_obj_load (rtems_rtl_obj_t* obj)
   {
     if (!rtems_rtl_obj_archive_find (obj, fd))
     {
-      rtems_rtl_obj_caches_flush ();
       close (fd);
       return false;
     }
   }
 
   /*
-   * Call the format specific loader. Currently this is a call to the ELF
-   * loader. This call could be changed to allow probes then calls if more than
-   * one format is supported.
+   * Call the format specific loader.
    */
   if (!rtems_rtl_obj_file_load (obj, fd))
   {
-    rtems_rtl_obj_caches_flush ();
     close (fd);
     return false;
   }
@@ -1081,8 +1135,6 @@ rtems_rtl_obj_load (rtems_rtl_obj_t* obj)
     return false;
   }
 
-  rtems_rtl_obj_caches_flush ();
-
   close (fd);
 
   return true;
@@ -1092,6 +1144,6 @@ bool
 rtems_rtl_obj_unload (rtems_rtl_obj_t* obj)
 {
   _rtld_linkmap_delete(obj);
-  rtems_rtl_symbol_obj_erase (obj);
-  return rtems_rtl_obj_free (obj);
+  rtems_rtl_obj_file_unload (obj);
+  return true;
 }
diff --git a/cpukit/libdl/rtl-obj.h b/cpukit/libdl/rtl-obj.h
index 80fc60f..9ec184b 100644
--- a/cpukit/libdl/rtl-obj.h
+++ b/cpukit/libdl/rtl-obj.h
@@ -56,14 +56,20 @@ typedef struct rtems_rtl_loader_format_s
 typedef bool (*rtems_rtl_loader_check) (rtems_rtl_obj_t* obj, int fd);
 
 /**
- * The type of the format loader handler. This handler loads the specific
+ * The type of the format loader load handler. This handler loads the specific
  * format.
  */
 typedef bool (*rtems_rtl_loader_load) (rtems_rtl_obj_t* obj, int fd);
 
 /**
- * The type of the format loader handler. This handler loads the specific
- * format.
+ * The type of the format loader unload handler. This handler unloads the
+ * specific format.
+ */
+typedef bool (*rtems_rtl_loader_unload) (rtems_rtl_obj_t* obj);
+
+/**
+ * The type of the format loader signature handler. This handler checks the
+ * format signature.
  */
 typedef rtems_rtl_loader_format_t* (*rtems_rtl_loader_sig) (void);
 
@@ -72,9 +78,10 @@ typedef rtems_rtl_loader_format_t* (*rtems_rtl_loader_sig) (void);
  */
 typedef struct rtems_rtl_loader_table_s
 {
-  rtems_rtl_loader_check check;     /**< The check handler. */
-  rtems_rtl_loader_load  load;      /**< The loader. */
-  rtems_rtl_loader_sig   signature; /**< The loader's signature. */
+  rtems_rtl_loader_check  check;     /**< The check handler. */
+  rtems_rtl_loader_load   load;      /**< The loader. */
+  rtems_rtl_loader_unload unload;    /**< The unloader. */
+  rtems_rtl_loader_sig    signature; /**< The loader's signature. */
 } rtems_rtl_loader_table_t;
 
 /**
@@ -84,18 +91,19 @@ typedef struct rtems_rtl_loader_table_s
 #define RTEMS_RTL_OBJ_SECT_CONST (1 << 1)  /**< Section holds program text. */
 #define RTEMS_RTL_OBJ_SECT_DATA  (1 << 2)  /**< Section holds program data. */
 #define RTEMS_RTL_OBJ_SECT_BSS   (1 << 3)  /**< Section holds program bss. */
-#define RTEMS_RTL_OBJ_SECT_REL   (1 << 4)  /**< Section holds relocation records. */
-#define RTEMS_RTL_OBJ_SECT_RELA  (1 << 5)  /**< Section holds relocation addend
+#define RTEMS_RTL_OBJ_SECT_EH    (1 << 4)  /**< Section holds exception data. */
+#define RTEMS_RTL_OBJ_SECT_REL   (1 << 5)  /**< Section holds relocation records. */
+#define RTEMS_RTL_OBJ_SECT_RELA  (1 << 6)  /**< Section holds relocation addend
                                             *   records. */
-#define RTEMS_RTL_OBJ_SECT_SYM   (1 << 6)  /**< Section holds symbols. */
-#define RTEMS_RTL_OBJ_SECT_STR   (1 << 7)  /**< Section holds strings. */
-#define RTEMS_RTL_OBJ_SECT_ALLOC (1 << 8)  /**< Section allocates runtime memory. */
-#define RTEMS_RTL_OBJ_SECT_LOAD  (1 << 9)  /**< Section is loaded from object file. */
-#define RTEMS_RTL_OBJ_SECT_WRITE (1 << 10) /**< Section is writable, ie data. */
-#define RTEMS_RTL_OBJ_SECT_EXEC  (1 << 11) /**< Section is executable. */
-#define RTEMS_RTL_OBJ_SECT_ZERO  (1 << 12) /**< Section is preset to zero. */
-#define RTEMS_RTL_OBJ_SECT_CTOR  (1 << 13) /**< Section contains constructors. */
-#define RTEMS_RTL_OBJ_SECT_DTOR  (1 << 14) /**< Section contains destructors. */
+#define RTEMS_RTL_OBJ_SECT_SYM   (1 << 7)  /**< Section holds symbols. */
+#define RTEMS_RTL_OBJ_SECT_STR   (1 << 8)  /**< Section holds strings. */
+#define RTEMS_RTL_OBJ_SECT_ALLOC (1 << 9)  /**< Section allocates runtime memory. */
+#define RTEMS_RTL_OBJ_SECT_LOAD  (1 << 10) /**< Section is loaded from object file. */
+#define RTEMS_RTL_OBJ_SECT_WRITE (1 << 11) /**< Section is writable, ie data. */
+#define RTEMS_RTL_OBJ_SECT_EXEC  (1 << 12) /**< Section is executable. */
+#define RTEMS_RTL_OBJ_SECT_ZERO  (1 << 13) /**< Section is preset to zero. */
+#define RTEMS_RTL_OBJ_SECT_CTOR  (1 << 14) /**< Section contains constructors. */
+#define RTEMS_RTL_OBJ_SECT_DTOR  (1 << 15) /**< Section contains destructors. */
 
 /**
  * An object file is made up of sections and the can be more than
@@ -109,7 +117,7 @@ struct rtems_rtl_obj_sect_s
   const char*      name;        /**< The section's name. */
   size_t           size;        /**< The size of the section in memory. */
   off_t            offset;      /**< Offset into the object file. Relative to
-                                 * the start of the object file. */
+                                 *   the start of the object file. */
   uint32_t         alignment;   /**< Alignment of this section. */
   int              link;        /**< Section link field. */
   int              info;        /**< Secfion info field. */
@@ -135,6 +143,7 @@ struct rtems_rtl_obj_s
   rtems_chain_node     link;         /**< The node's link in the chain. */
   uint32_t             flags;        /**< The status of the object file. */
   uint32_t             users;        /**< References to the object file. */
+  int                  format;       /**< The format of the object file. */
   const char*          fname;        /**< The file name for the object. */
   const char*          oname;        /**< The object file name. Can be
                                       *   relative. */
@@ -153,26 +162,27 @@ struct rtems_rtl_obj_s
   size_t               global_size;  /**< Global symbol memory usage. */
   uint32_t             unresolved;   /**< The number of unresolved relocations. */
   void*                text_base;    /**< The base address of the text section
-                                      * in memory. */
+                                      *   in memory. */
+  size_t               text_size;     /**< The size of the text section. */
   void*                const_base;   /**< The base address of the const section
-                                      * in memory. */
+                                      *   in memory. */
+  void*                eh_base;      /**< The base address of the eh section
+                                      *   in memory. */
+  size_t               eh_size;      /**< The size of the eh section. */
   void*                data_base;    /**< The base address of the data section
-                                      * in memory. */
+                                      *   in memory. */
   void*                bss_base;     /**< The base address of the bss section
-                                      * in memory. */
+                                      *   in memory. */
   size_t               bss_size;     /**< The size of the bss section. */
   size_t               exec_size;    /**< The amount of executable memory
-                                      * allocated */
+                                      *   allocated */
   void*                entry;        /**< The entry point of the module. */
   uint32_t             checksum;     /**< The checksum of the text sections. A
-                                      * zero means do not checksum. */
-  void*                detail;       /**< The file details. It contains the elf file
-                                      * detail, mainly including elf file name,
-                                      * section offset, section size, which
-                                      * elf this section belongs to.*/
+                                      *   zero means do not checksum. */
   uint32_t*            sec_num;      /**< The sec nums of each obj. */
   uint32_t             obj_num;      /**< The count of elf files in an rtl obj. */
   struct link_map*     linkmap;      /**< For GDB. */
+  void*                loader;       /**< The file details specific to a loader. */
 };
 
 /**
@@ -258,6 +268,20 @@ static inline bool rtems_rtl_obj_aname_valid (const rtems_rtl_obj_t* obj)
 }
 
 /**
+ * Is the address inside the text section?
+ *
+ * @param obj The object file.
+ * @return bool There is an archive name
+ */
+static inline bool rtems_rtl_obj_text_inside (const rtems_rtl_obj_t* obj,
+                                              const void*            address)
+{
+  return
+    (address >= obj->text_base) &&
+    (address < (obj->text_base + obj->text_size));
+}
+
+/**
  * Allocate an object structure on the heap.
  *
  * @retval NULL No memory for the object.
@@ -300,18 +324,6 @@ bool rtems_rtl_parse_name (const char*  name,
                            off_t*       ooffset);
 
 /**
- * Load the object file.
- *
- * @param obj The object file's descriptor.
- * @param fd The file descriptor.
- * @param load_syms Load symbols.
- * @param load_dep Load dependent object files.
- * @retval true The load was successful.
- * @retval false The load failed. The RTL error has been set.
- */
-bool rtems_rtl_obj_file_load (rtems_rtl_obj_t* obj, int fd);
-
-/**
  * Check of the name matches the object file's object name.
  *
  * @param obj The object file's descriptor.
@@ -371,8 +383,8 @@ void rtems_rtl_obj_erase_sections (rtems_rtl_obj_t* obj);
  * @retval NULL The section was not found.
  * @return rtems_rtl_obj_sect_t* The named section.
  */
-rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section (rtems_rtl_obj_t* obj,
-                                                  const char*      name);
+rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section (const rtems_rtl_obj_t* obj,
+                                                  const char*            name);
 
 /**
  * Find a section given a section's index number.
@@ -382,21 +394,21 @@ rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section (rtems_rtl_obj_t* obj,
  * @retval NULL The section was not found.
  * @return rtems_rtl_obj_sect_t* The found section.
  */
-rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section_by_index (rtems_rtl_obj_t* obj,
-                                                           int              index);
+rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section_by_index (const rtems_rtl_obj_t* obj,
+                                                           int                    index);
 
 /**
- * The text size of the object file. Only use once all the sections has been
- * added. It includes alignments between sections that are part of the object's
- * text area. The consts sections are included in this section.
+ * The text section size. Only use once all the sections has been added. It
+ * includes alignments between sections that are part of the object's text
+ * area. The consts sections are included in this section.
  *
  * @param obj The object file's descriptor.
  * @return size_t The size of the text area of the object file.
  */
-size_t rtems_rtl_obj_text_size (rtems_rtl_obj_t* obj);
+size_t rtems_rtl_obj_text_size (const rtems_rtl_obj_t* obj);
 
 /**
- * The text section alignment of the object file. Only use once all the
+ * The text section alignment for the object file. Only use once all the
  * sections has been added. The section alignment is the alignment of the first
  * text type section loaded the text section.
  *
@@ -406,20 +418,20 @@ size_t rtems_rtl_obj_text_size (rtems_rtl_obj_t* obj);
  * @param obj The object file's descriptor.
  * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment.
  */
-uint32_t rtems_rtl_obj_text_alignment (rtems_rtl_obj_t* obj);
+uint32_t rtems_rtl_obj_text_alignment (const rtems_rtl_obj_t* obj);
 
 /**
- * The const size of the object file. Only use once all the sections has been
- * added. It includes alignments between sections that are part of the object's
- * const area. The consts sections are included in this section.
+ * The const section size. Only use once all the sections has been added. It
+ * includes alignments between sections that are part of the object's const
+ * area. The consts sections are included in this section.
  *
  * @param obj The object file's descriptor.
  * @return size_t The size of the const area of the object file.
  */
-size_t rtems_rtl_obj_const_size (rtems_rtl_obj_t* obj);
+size_t rtems_rtl_obj_const_size (const rtems_rtl_obj_t* obj);
 
 /**
- * The const section alignment of the object file. Only use once all the
+ * The const section alignment for the object file. Only use once all the
  * sections has been added. The section alignment is the alignment of the first
  * const type section loaded the const section.
  *
@@ -429,20 +441,42 @@ size_t rtems_rtl_obj_const_size (rtems_rtl_obj_t* obj);
  * @param obj The object file's descriptor.
  * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment.
  */
-uint32_t rtems_rtl_obj_const_alignment (rtems_rtl_obj_t* obj);
+uint32_t rtems_rtl_obj_const_alignment (const rtems_rtl_obj_t* obj);
+
+/**
+ * The eh section size. Only use once all the sections has been added. It
+ * includes alignments between sections that are part of the object's bss area.
+ *
+ * @param obj The object file's descriptor.
+ * @return size_t The size of the bss area of the object file.
+ */
+size_t rtems_rtl_obj_eh_size (const rtems_rtl_obj_t* obj);
+
+/**
+ * The eh section alignment for the object file. Only use once all the sections
+ * has been added. The section alignment is the alignment of the first bss type
+ * section loaded the bss section.
+ *
+ * You can assume the alignment is a positive integral power of 2 if not 0 or
+ * 1. If 0 or 1 then there is no alignment.
+ *
+ * @param obj The object file's descriptor.
+ * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment.
+ */
+uint32_t rtems_rtl_obj_eh_alignment (const rtems_rtl_obj_t* obj);
 
 /**
- * The data size of the object file. Only use once all the sections has been
- * added. It includes alignments between sections that are part of the object's
- * data area.
+ * The data section size. Only use once all the sections has been added. It
+ * includes alignments between sections that are part of the object's data
+ * area.
  *
  * @param obj The object file's descriptor.
  * @return size_t The size of the data area of the object file.
  */
-size_t rtems_rtl_obj_data_size (rtems_rtl_obj_t* obj);
+size_t rtems_rtl_obj_data_size (const rtems_rtl_obj_t* obj);
 
 /**
- * The data section alignment of the object file. Only use once all the
+ * The data section alignment for the object file. Only use once all the
  * sections has been added. The section alignment is the alignment of the first
  * data type section loaded the data section.
  *
@@ -452,20 +486,19 @@ size_t rtems_rtl_obj_data_size (rtems_rtl_obj_t* obj);
  * @param obj The object file's descriptor.
  * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment.
  */
-uint32_t rtems_rtl_obj_data_alignment (rtems_rtl_obj_t* obj);
+uint32_t rtems_rtl_obj_data_alignment (const rtems_rtl_obj_t* obj);
 
 /**
- * The bss size of the object file. Only use once all the sections has been
- * added. It includes alignments between sections that are part of the object's
- * bss area.
+ * The bss section size. Only use once all the sections has been added. It
+ * includes alignments between sections that are part of the object's bss area.
  *
  * @param obj The object file's descriptor.
  * @return size_t The size of the bss area of the object file.
  */
-size_t rtems_rtl_obj_bss_size (rtems_rtl_obj_t* obj);
+size_t rtems_rtl_obj_bss_size (const rtems_rtl_obj_t* obj);
 
 /**
- * The bss section alignment of the object file. Only use once all the
+ * The bss section alignment for the object file. Only use once all the
  * sections has been added. The section alignment is the alignment of the first
  * bss type section loaded the bss section.
  *
@@ -475,7 +508,7 @@ size_t rtems_rtl_obj_bss_size (rtems_rtl_obj_t* obj);
  * @param obj The object file's descriptor.
  * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment.
  */
-uint32_t rtems_rtl_obj_bss_alignment (rtems_rtl_obj_t* obj);
+uint32_t rtems_rtl_obj_bss_alignment (const rtems_rtl_obj_t* obj);
 
 /**
  * Relocate the object file. The object file's section are parsed for any
diff --git a/cpukit/libdl/rtl-rap.c b/cpukit/libdl/rtl-rap.c
index a7fcb9f..cb7b751 100644
--- a/cpukit/libdl/rtl-rap.c
+++ b/cpukit/libdl/rtl-rap.c
@@ -427,20 +427,22 @@ rtems_rtl_rap_relocate (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
 }
 
 /**
- * The structure of obj->detail is
+ * The structure of obj->linkmap is:
  *
  * |object_detail(0..obj_num)|section_detail(0..sec_num[0..obj_num])|
  * obj_name(0..obj_num)|section_name(0..sec_num[0..obj_num])
  *
  */
 static bool
-rtems_rtl_rap_load_details (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
+rtems_rtl_rap_load_linkmap (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
 {
+  void*            detail;
   struct link_map* tmp1;
-  section_detail* tmp2;
-  uint32_t obj_detail_size;
-  uint32_t pos = 0;
-  int i,j;
+  section_detail*  tmp2;
+  uint32_t         obj_detail_size;
+  uint32_t         pos = 0;
+  int              i;
+  int              j;
 
   obj_detail_size = sizeof (struct link_map) * obj->obj_num;
 
@@ -449,26 +451,31 @@ rtems_rtl_rap_load_details (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
     obj_detail_size += (obj->sec_num[i] * sizeof (section_detail));
   }
 
-  obj->detail = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
-                                     obj_detail_size + rap->strtable_size, true);
+  detail = rtems_rtl_alloc_new (RTEMS_RTL_ALLOC_OBJECT,
+                                obj_detail_size + rap->strtable_size, true);
 
-  if (!obj->detail)
+  if (!detail)
   {
     rap->strtable_size = 0;
     rtems_rtl_set_error (ENOMEM, "no memory for obj global syms");
     return false;
   }
 
-  rap->strtable = obj->detail + obj_detail_size;
+  rap->strtable = detail + obj_detail_size;
 
-  /* Read the obj names and section names */
-  if (!rtems_rtl_obj_comp_read (rap->decomp, rap->strtable,
+  /*
+   *  Read the obj names and section names
+   */
+  if (!rtems_rtl_obj_comp_read (rap->decomp,
+                                rap->strtable,
                                 rap->strtable_size))
   {
-    rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_OBJECT, obj->detail);
+    rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_OBJECT, detail);
     return false;
   }
 
+  obj->linkmap = (struct link_map*) detail;
+
   if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
   {
     if (rap->rpathlen > 0)
@@ -489,7 +496,7 @@ rtems_rtl_rap_load_details (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
 
   for (i = 0; i < obj->obj_num; ++i)
   {
-    tmp1 = (struct link_map*) (obj->detail) + i;
+    tmp1 = obj->linkmap + i;
     tmp1->name = rap->strtable + pos;
     tmp1->sec_num = obj->sec_num[i];
     tmp1->rpathlen = rap->rpathlen;
@@ -509,17 +516,17 @@ rtems_rtl_rap_load_details (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
     }
   }
 
-  tmp2 =(section_detail*) ((struct link_map*) (obj->detail) + obj->obj_num);
+  tmp2 = (section_detail*) (obj->linkmap + obj->obj_num);
 
   for (i = 0; i < obj->obj_num; ++i)
   {
     if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
     {
-      printf ("File %d: %s\n", i, ((struct link_map*) obj->detail + i)->name);
-      printf ("Section: %d sections\n",(unsigned int) obj->sec_num[i]);
+      printf ("File %d: %s\n", i, (obj->linkmap + i)->name);
+      printf ("Section: %d sections\n", (unsigned int) obj->sec_num[i]);
     }
 
-    ((struct link_map*)obj->detail + i)->sec_detail = tmp2;
+    obj->linkmap[i].sec_detail = tmp2;
 
     for (j = 0; j < obj->sec_num[i]; ++j)
     {
@@ -532,7 +539,8 @@ rtems_rtl_rap_load_details (rtems_rtl_rap_t* rap, rtems_rtl_obj_t* obj)
           !rtems_rtl_rap_read_uint32 (rap->decomp, &offset) ||
           !rtems_rtl_rap_read_uint32 (rap->decomp, &size))
       {
-        rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_SYMBOL, obj->detail);
+        rtems_rtl_alloc_del (RTEMS_RTL_ALLOC_SYMBOL, obj->linkmap);
+        obj->linkmap = NULL;
         return false;
       }
 
@@ -907,7 +915,7 @@ rtems_rtl_rap_file_load (rtems_rtl_obj_t* obj, int fd)
     if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
       printf ("rtl: rap: details: obj_num=%lu\n", obj->obj_num);
 
-    if (!rtems_rtl_rap_load_details (&rap, obj))
+    if (!rtems_rtl_rap_load_linkmap (&rap, obj))
       return false;
   }
 
@@ -975,6 +983,13 @@ rtems_rtl_rap_file_load (rtems_rtl_obj_t* obj, int fd)
   return true;
 }
 
+bool
+rtems_rtl_rap_file_unload (rtems_rtl_obj_t* obj)
+{
+  (void) obj;
+  return true;
+}
+
 rtems_rtl_loader_format_t*
 rtems_rtl_rap_file_sig (void)
 {
diff --git a/cpukit/libdl/rtl-rap.h b/cpukit/libdl/rtl-rap.h
index f828b1f..eca6e9e 100644
--- a/cpukit/libdl/rtl-rap.h
+++ b/cpukit/libdl/rtl-rap.h
@@ -41,6 +41,13 @@ bool rtems_rtl_rap_file_check (rtems_rtl_obj_t* obj, int fd);
 bool rtems_rtl_rap_file_load (rtems_rtl_obj_t* obj, int fd);
 
 /**
+ * The RAP format unload handler.
+ *
+ * @param obj The object to unload.
+ */
+bool rtems_rtl_rap_file_unload (rtems_rtl_obj_t* obj);
+
+/**
  * The RAP format signature handler.
  *
  * @return rtems_rtl_loader_format_t* The format's signature.
diff --git a/cpukit/libdl/rtl-unwind-dw2.c b/cpukit/libdl/rtl-unwind-dw2.c
new file mode 100644
index 0000000..d9237c5
--- /dev/null
+++ b/cpukit/libdl/rtl-unwind-dw2.c
@@ -0,0 +1,71 @@
+/*
+ *  COPYRIGHT (c) 2012-2016 Chris Johns <chrisj at rtems.org>
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+/**
+ * @file
+ *
+ * @ingroup rtems_rtld
+ *
+ * @brief RTEMS Run-Time Link Editor
+ *
+ * This is the RTL implementation.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdio.h>
+
+#include <rtems/rtl/rtl.h>
+#include "rtl-elf.h"
+#include "rtl-error.h"
+#include "rtl-unwind.h"
+#include "rtl-unwind-dw2.h"
+
+/*
+ * These interfaces are not exported outside the GCC source.
+ */
+void __register_frame (void *begin);
+void __deregister_frame (void *begin);
+
+bool
+rtems_rtl_elf_unwind_dw2_parse (const rtems_rtl_obj_t* obj,
+                                const char*            name,
+                                uint32_t               flags)
+{
+  return
+    ((flags & RTEMS_RTL_OBJ_SECT_CONST) != 0) &&
+    ((strcmp(name, ".eh_frame") == 0) ||
+     (strncmp(name, ".gcc_except_table.", sizeof (".gcc_except_table.") - 1) == 0));
+}
+
+bool
+rtems_rtl_elf_unwind_dw2_register (const rtems_rtl_obj_t* obj)
+{
+  rtems_rtl_obj_sect_t* sect = rtems_rtl_obj_find_section (obj, ".eh_frame");
+
+  if (sect != NULL && sect->size > 0 && sect->base != NULL)
+  {
+    __register_frame (sect->base);
+  }
+
+  return true;
+}
+
+bool rtems_rtl_elf_unwind_dw2_deregister (const rtems_rtl_obj_t* obj)
+{
+  rtems_rtl_obj_sect_t* sect = rtems_rtl_obj_find_section (obj, ".eh_frame");
+
+  if (sect != NULL && sect->size > 0 && sect->base != NULL)
+  {
+    __deregister_frame (sect->base);
+  }
+
+  return true;
+}
diff --git a/cpukit/libdl/rtl-unwind-dw2.h b/cpukit/libdl/rtl-unwind-dw2.h
new file mode 100644
index 0000000..55b9797
--- /dev/null
+++ b/cpukit/libdl/rtl-unwind-dw2.h
@@ -0,0 +1,83 @@
+/*
+ *  COPYRIGHT (c) 2016 Chris Johns <chrisj at rtems.org>
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+/**
+ * @file
+ *
+ * @ingroup rtems_rtl
+ *
+ * @brief RTEMS Run-Time Linker Unwind DWARF  Support.
+ */
+
+#if !defined (_RTEMS_RTL_UNWIND_DW2_H_)
+#define _RTEMS_RTL_UNWIND_DW2_H_
+
+#include "rtl-elf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if __SIZEOF_LONG__ >= __SIZEOF_POINTER__
+  typedef long rtems_rtl_elf_unwind_dw2_sleb128;
+  typedef unsigned long rtems_rtl_elf_unwind_dw2_uleb128;
+#elif __SIZEOF_LONG_LONG__ >= __SIZEOF_POINTER__
+  typedef long long rtems_rtl_elf_unwind_dw2_sleb128;
+  typedef unsigned long long rtems_rtl_elf_unwind_dw2_uleb128;
+#else
+  #error No DW2 type available.
+#endif
+
+/**
+ * Architecture specific handler to check if a section contains exception
+ * handler data..
+ *
+ * @param obj The object file.
+ * @param name The section's name.
+ * @param uint32 flags The object file's flags.
+ * @retval true The section contains unwind information.
+ * @retval false The section does not contain unwind information.
+ */
+bool rtems_rtl_elf_unwind_dw2_parse (const rtems_rtl_obj_t* obj,
+				     const char*            name,
+				     uint32_t               flags);
+
+/**
+ * Architecture specific handler to add an object file's unwind information to
+ * the base image.
+ *
+ * @param obj The object file.
+ * @retval true The unwind information has been registered.
+ * @retval false The unwind information could not be registered.
+ */
+bool rtems_rtl_elf_unwind_dw2_register (const rtems_rtl_obj_t* obj);
+
+/**
+ * Architecture specific handler to remove an object file's unwind information
+ * from the base image.
+ *
+ * @param obj The object file.
+ * @retval true The unwind information has been deregistered.
+ * @retval false The unwind information could not be deregistered.
+ */
+bool rtems_rtl_elf_unwind_dw2_deregister (const rtems_rtl_obj_t* obj);
+
+/**
+ * Read signed and unsigned LEB128 values.
+ */
+const uint8_t* rtems_rtl_elf_unwind_dw2_read_uleb128 (const uint8_t*                    data,
+						      rtems_rtl_elf_unwind_dw2_uleb128* val);
+const uint8_t* rtems_rtl_elf_unwind_dw2_read_sleb128 (const uint8_t*                    data,
+						      rtems_rtl_elf_unwind_dw2_sleb128* val);
+
+bool rtems_rtl_elf_unwind_dw2_relocate (const Elf_Addr* where, Elf_Word value, Elf_Word mask);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/cpukit/libdl/rtl-unwind.h b/cpukit/libdl/rtl-unwind.h
new file mode 100644
index 0000000..f88787e
--- /dev/null
+++ b/cpukit/libdl/rtl-unwind.h
@@ -0,0 +1,63 @@
+/*
+ *  COPYRIGHT (c) 2016 Chris Johns <chrisj at rtems.org>
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+/**
+ * @file
+ *
+ * @ingroup rtems_rtl
+ *
+ * @brief RTEMS Run-Time Linker Unwind Support.
+ */
+
+#if !defined (_RTEMS_RTL_UNWIND_H_)
+#define _RTEMS_RTL_UNWIND_H_
+
+#include "rtl-elf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * Architecture specific handler to check if a section contains exception
+ * handler data..
+ *
+ * @param obj The object file.
+ * @param name The section's name.
+ * @param uint32 flags The object file's flags.
+ * @retval true The section contains unwind information.
+ * @retval false The section does not contain unwind information.
+ */
+bool rtems_rtl_elf_unwind_parse (const rtems_rtl_obj_t* obj,
+                                 const char*            name,
+                                 uint32_t               flags);
+
+/**
+ * Architecture specific handler to add an object file's unwind information to
+ * the base image.
+ *
+ * @param obj The object file.
+ * @retval true The unwind information has been registered.
+ * @retval false The unwind information could not be registered.
+ */
+bool rtems_rtl_elf_unwind_register (rtems_rtl_obj_t* obj);
+
+/**
+ * Architecture specific handler to remove an object file's unwind information
+ * from the base image.
+ *
+ * @param obj The object file.
+ * @retval true The unwind information has been deregistered.
+ * @retval false The unwind information could not be deregistered.
+ */
+bool rtems_rtl_elf_unwind_deregister (rtems_rtl_obj_t* obj);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/cpukit/libdl/rtl.c b/cpukit/libdl/rtl.c
index abfcf25..5052251 100644
--- a/cpukit/libdl/rtl.c
+++ b/cpukit/libdl/rtl.c
@@ -62,6 +62,7 @@
  * Static RTL data is returned to the user when the linker is locked.
  */
 static rtems_rtl_data_t* rtl;
+static bool              rtl_data_init;
 
 /**
  * Define a default base global symbol loader function that is weak
@@ -95,11 +96,25 @@ rtems_rtl_data_init (void)
       rtems_id          lock;
 
       /*
+       * We cannot set an error in this code because there is no RTL data to
+       * hold it.
+       */
+
+      if (rtl_data_init)
+      {
+        rtems_libio_unlock ();
+        return false;
+      }
+
+      rtl_data_init = true;
+
+      /*
        * Always in the heap.
        */
       rtl = malloc (sizeof (rtems_rtl_data_t));
       if (!rtl)
       {
+        rtems_libio_unlock ();
         errno = ENOMEM;
         return false;
       }
@@ -120,6 +135,7 @@ rtems_rtl_data_init (void)
       if (sc != RTEMS_SUCCESSFUL)
       {
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -128,6 +144,7 @@ rtems_rtl_data_init (void)
       {
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -143,6 +160,7 @@ rtems_rtl_data_init (void)
       {
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -152,6 +170,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_symbol_table_close (&rtl->globals);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -162,6 +181,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_unresolved_table_close (&rtl->unresolved);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -173,6 +193,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_symbol_table_close (&rtl->globals);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -185,6 +206,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_symbol_table_close (&rtl->globals);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -198,6 +220,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_symbol_table_close (&rtl->globals);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -212,6 +235,7 @@ rtems_rtl_data_init (void)
         rtems_rtl_symbol_table_close (&rtl->globals);
         rtems_semaphore_delete (lock);
         free (rtl);
+        rtems_libio_unlock ();
         return false;
       }
 
@@ -288,7 +312,7 @@ rtems_rtl_obj_caches (rtems_rtl_obj_cache_t** symbols,
 }
 
 void
-rtems_rtl_obj_caches_flush ()
+rtems_rtl_obj_caches_flush (void)
 {
   if (rtl)
   {
@@ -438,6 +462,7 @@ rtems_rtl_load_object (const char* name, int mode)
     if (!rtems_rtl_obj_find_file (obj, name))
     {
       rtems_rtl_obj_free (obj);
+      rtems_rtl_obj_caches_flush ();
       return NULL;
     }
 
@@ -446,9 +471,12 @@ rtems_rtl_load_object (const char* name, int mode)
     if (!rtems_rtl_obj_load (obj))
     {
       rtems_rtl_obj_free (obj);
+      rtems_rtl_obj_caches_flush ();
       return NULL;
     }
 
+    rtems_rtl_obj_caches_flush ();
+
     rtems_rtl_unresolved_resolve ();
   }
 
@@ -514,6 +542,9 @@ rtems_rtl_unload_object (rtems_rtl_obj_t* obj)
     obj->flags &= ~RTEMS_RTL_OBJ_LOCKED;
 
     ok = rtems_rtl_obj_unload (obj);
+
+    rtems_rtl_obj_free (obj);
+    rtems_rtl_obj_caches_flush ();
   }
 
   return ok;
diff --git a/cpukit/libdl/rtl.h b/cpukit/libdl/rtl.h
index 234fc32..fe9a7df 100644
--- a/cpukit/libdl/rtl.h
+++ b/cpukit/libdl/rtl.h
@@ -112,7 +112,7 @@ struct rtems_rtl_data_s
 };
 
 /**
- * Get the RTL data with out locking. This call assmes the RTL is locked.
+ * Get the RTL data with out locking. This call assumes the RTL is locked.
  *
  * @return rtems_rtl_data_t* The RTL data after being locked.
  * @retval NULL The RTL data is not initialised.
diff --git a/testsuites/libtests/dl01/init.c b/testsuites/libtests/dl01/init.c
index 9fbdaa5..e9c7a1a 100644
--- a/testsuites/libtests/dl01/init.c
+++ b/testsuites/libtests/dl01/init.c
@@ -73,6 +73,8 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
 
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
@@ -80,4 +82,3 @@ static void Init(rtems_task_argument arg)
 #define CONFIGURE_INIT
 
 #include <rtems/confdefs.h>
-
diff --git a/testsuites/libtests/dl02/init.c b/testsuites/libtests/dl02/init.c
index f761b46..bf2d1a9 100644
--- a/testsuites/libtests/dl02/init.c
+++ b/testsuites/libtests/dl02/init.c
@@ -73,6 +73,8 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
 
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/libtests/dl03/init.c b/testsuites/libtests/dl03/init.c
index 68f8150..ae82722 100644
--- a/testsuites/libtests/dl03/init.c
+++ b/testsuites/libtests/dl03/init.c
@@ -55,6 +55,8 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
 
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/libtests/dl04/init.c b/testsuites/libtests/dl04/init.c
index 566752b..6e48864 100644
--- a/testsuites/libtests/dl04/init.c
+++ b/testsuites/libtests/dl04/init.c
@@ -73,6 +73,8 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
 
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
diff --git a/testsuites/libtests/dl05/dl-cpp.cpp b/testsuites/libtests/dl05/dl-cpp.cpp
index fcb9e0a..0e20057 100644
--- a/testsuites/libtests/dl05/dl-cpp.cpp
+++ b/testsuites/libtests/dl05/dl-cpp.cpp
@@ -4,11 +4,27 @@
 #include <cstdio>
 #include <stdexcept>
 #include "dl-load.h"
-void exception_base(bool istrue)
+void exception_base(bool throw_runtime)
 {
-  printf("exception_base called\n");
-  if (istrue)
+  printf("%s: begin\n", __func__);
+  try
   {
-    throw std::runtime_error("dummy call to link in symbols");
+    if (throw_runtime)
+      throw std::runtime_error("eb: throw std::runtime_error");
+    else
+      throw dl_test_throw_me("eb: throw me");
   }
+  catch (std::exception const& e)
+  {
+    printf("%s: caught: %s\n", __func__, e.what());
+  }
+  catch (dl_test_throw_me const& e)
+  {
+    printf("%s: caught: %s\n", __func__, e.what());
+  }
+  catch (...)
+  {
+    printf("%s: caught: unknown\n", __func__);
+  }
+  printf("%s: end\n", __func__);
 }
diff --git a/testsuites/libtests/dl05/dl-load.c b/testsuites/libtests/dl05/dl-load.c
index f94317d..c7d5698 100644
--- a/testsuites/libtests/dl05/dl-load.c
+++ b/testsuites/libtests/dl05/dl-load.c
@@ -24,22 +24,38 @@ int dl_load_test(void)
 {
   void*       handle;
   const char* err;
-  void        (*func)(void);
+  void        (*func)(bool );
+#if __i386__
+  /*
+   * std::runtime_error destructor locks up in atomics.
+   */
+  bool        throw_runtime = false;
+#else
+  bool        throw_runtime = true;
+#endif
 
   rtems_rtl_trace_set_mask(RTEMS_RTL_TRACE_ALL);
+
   handle = dlopen("/dl-o5.o", RTLD_GLOBAL | RTLD_NOW);
-  err = dlerror();
-  if (err != NULL)
-    printf("dlopen: %s\n", err);
+  if (handle == NULL)
+  {
+    err = dlerror();
+    if (err != NULL)
+      printf("dlopen: %s\n", err);
+  }
   rtems_test_assert(handle != NULL);
+
   func = dlsym(handle, "exception_dl");
-  err = dlerror ();
-  if (err)
-    printf ("dlsym: %s\n", err);
+  if (func == NULL) {
+    err = dlerror ();
+    if (err)
+      printf ("dlsym: %s\n", err);
+  }
   rtems_test_assert(func != NULL);
 
-  exception_base(false);
-  func();
+  exception_base(throw_runtime);
+
+  func(throw_runtime);
 
   rtems_test_assert(dlclose(handle) == 0);
 
diff --git a/testsuites/libtests/dl05/dl-load.h b/testsuites/libtests/dl05/dl-load.h
index 98f4154..7a9e138 100644
--- a/testsuites/libtests/dl05/dl-load.h
+++ b/testsuites/libtests/dl05/dl-load.h
@@ -13,12 +13,38 @@
 extern "C" {
 #endif
 
-void exception_base(bool istrue);
-void exception_dl(void);
+void exception_base(bool throw_runtime);
+void exception_dl(bool throw_runtime);
 
 int dl_load_test(void);
 
 #ifdef __cplusplus
+  class dl_test_throw_me
+  {
+  public:
+    dl_test_throw_me(const char* message) :
+      message (message) {
+    }
+    dl_test_throw_me(const dl_test_throw_me& orig) :
+      message (orig.message) {
+    }
+    dl_test_throw_me() :
+      message (0) {
+    }
+
+    ~dl_test_throw_me() {
+    }
+
+    const char* what() const {
+      return message;
+    }
+
+  private:
+    const char* message;
+  };
+#endif
+
+#ifdef __cplusplus
 }
 #endif
 
diff --git a/testsuites/libtests/dl05/dl-o5.cpp b/testsuites/libtests/dl05/dl-o5.cpp
index 6e8476d..5918e8f 100644
--- a/testsuites/libtests/dl05/dl-o5.cpp
+++ b/testsuites/libtests/dl05/dl-o5.cpp
@@ -1,12 +1,20 @@
 #include <cstdio>
 #include <stdexcept>
 #include "dl-load.h" /* make the symbol a C linkage */
-void exception_dl(void)
+void exception_dl(bool throw_runtime)
 {
+  printf("exception_dl: begin\n");
   try
   {
-    printf("exception_dl: throwing\n");
-    throw std::runtime_error("exception_dl throw");
+    printf("exception_dl: throwing...\n");
+    if (throw_runtime)
+      throw std::runtime_error("throw std::runtime_error object");
+    else
+      throw dl_test_throw_me("throw dl_test_throw_me object");
+  }
+  catch (dl_test_throw_me const& e)
+  {
+    printf("%s: caught: %s\n", __func__, e.what());
   }
   catch (std::exception const& e)
   {
@@ -16,4 +24,5 @@ void exception_dl(void)
   {
     printf("%s: caught: unknown\n", __func__);
   }
+  printf("exception_dl: end\n");
 }
diff --git a/testsuites/libtests/dl05/dl05.scn b/testsuites/libtests/dl05/dl05.scn
index 3a7e0d7..f80c085 100644
--- a/testsuites/libtests/dl05/dl05.scn
+++ b/testsuites/libtests/dl05/dl05.scn
@@ -1,620 +1,620 @@
 
 
 *** BEGIN OF TEST libdl (RTL) 5 ***
-rtl: alloc: new: SYMBOL addr=0x118cf8 size=384
-rtl: alloc: new: OBJECT addr=0x1192c8 size=2048
-rtl: alloc: new: OBJECT addr=0x119af0 size=2048
-rtl: alloc: new: OBJECT addr=0x11a318 size=2048
-rtl: alloc: new: OBJECT addr=0x11ab40 size=2048
-rtl: alloc: new: OBJECT addr=0x11b368 size=136
-rtl: alloc: new: OBJECT addr=0x11b418 size=13
-rtl: alloc: new: OBJECT addr=0x11b450 size=2
-rtl: adding global symbols, table size 29680
-rtl: global symbol add: 1070
-rtl: alloc: new: SYMBOL addr=0x11b480 size=21400
+rtl: alloc: new: SYMBOL addr=0x1347c0 size=384
+rtl: alloc: new: OBJECT addr=0x134d90 size=2048
+rtl: alloc: new: OBJECT addr=0x1355b8 size=2048
+rtl: alloc: new: OBJECT addr=0x135de0 size=2048
+rtl: alloc: new: OBJECT addr=0x136608 size=2048
+rtl: alloc: new: OBJECT addr=0x136e30 size=144
+rtl: alloc: new: OBJECT addr=0x136ee8 size=13
+rtl: alloc: new: OBJECT addr=0x136f20 size=2
+rtl: adding global symbols, table size 30208
+rtl: global symbol add: 1088
+rtl: alloc: new: SYMBOL addr=0x136f50 size=21760
 rtl: esyms: BSP_output_char -> 0x101524
-rtl: esyms: Clock_driver_ticks -> 0x102f20
-rtl: esyms: Clock_exit ->   0xa74f
-rtl: esyms: Clock_initialize ->   0xa75b
-rtl: esyms: Clock_isr ->   0xa67b
-rtl: esyms: Configuration ->  0x3b72c
-rtl: esyms: Configuration_POSIX_API -> 0x1027a8
+rtl: esyms: Clock_driver_ticks -> 0x103000
+rtl: esyms: Clock_exit ->   0xadcd
+rtl: esyms: Clock_initialize ->   0xadd9
+rtl: esyms: Clock_isr ->   0xacfb
+rtl: esyms: Configuration ->  0x3d38c
+rtl: esyms: Configuration_POSIX_API -> 0x102888
 rtl: esyms: Configuration_RTEMS_API -> 0x101458
 rtl: esyms: Console_Configuration_Count -> 0x101520
 rtl: esyms: Console_Configuration_Ports -> 0x101498
-rtl: esyms: Console_Port_Count -> 0x1028f0
-rtl: esyms: Console_Port_Data -> 0x1028f8
-rtl: esyms: Console_Port_Minor -> 0x1028fc
-rtl: esyms: Console_Port_Tbl -> 0x1028f4
+rtl: esyms: Console_Port_Count -> 0x1029d0
+rtl: esyms: Console_Port_Data -> 0x1029d8
+rtl: esyms: Console_Port_Minor -> 0x1029dc
+rtl: esyms: Console_Port_Tbl -> 0x1029d4
 rtl: esyms: HeapSize ->      0x0
-rtl: esyms: IMFS_LIMITS_AND_OPTIONS ->  0x4b8c4
-rtl: esyms: IMFS_chown ->   0xc423
-rtl: esyms: IMFS_create_node ->   0xc537
-rtl: esyms: IMFS_eval_path ->   0xcf91
-rtl: esyms: IMFS_fchmod ->   0xcfd3
-rtl: esyms: IMFS_initialize_node ->   0xd163
-rtl: esyms: IMFS_initialize_support ->   0xd1f5
-rtl: esyms: IMFS_link ->   0xd3ff
-rtl: esyms: IMFS_memfile_write ->   0xdd53
-rtl: esyms: IMFS_mknod ->   0xe3cb
-rtl: esyms: IMFS_mknod_control_device ->  0x4bb20
-rtl: esyms: IMFS_mknod_control_dir_default ->  0x4bac8
-rtl: esyms: IMFS_mknod_control_enosys ->  0x4bbcc
-rtl: esyms: IMFS_mknod_control_memfile ->  0x4bdcc
-rtl: esyms: IMFS_mount ->   0xe45d
-rtl: esyms: IMFS_node_clone ->   0xd2a9
-rtl: esyms: IMFS_node_destroy ->   0xd2d1
-rtl: esyms: IMFS_node_destroy_default ->   0xd38d
-rtl: esyms: IMFS_node_free ->   0xd311
-rtl: esyms: IMFS_node_initialize_default ->   0xd35f
-rtl: esyms: IMFS_node_initialize_directory ->   0xc703
-rtl: esyms: IMFS_node_remove_default ->   0xd377
-rtl: esyms: IMFS_node_remove_directory ->   0xc747
-rtl: esyms: IMFS_readlink ->   0xe9c3
-rtl: esyms: IMFS_rename ->   0xe66b
-rtl: esyms: IMFS_rmnod ->   0xe7d7
-rtl: esyms: IMFS_stat ->   0xe8b5
-rtl: esyms: IMFS_stat_file ->   0xe92b
-rtl: esyms: IMFS_symlink ->   0xe969
-rtl: esyms: IMFS_unmount ->   0xeaa5
-rtl: esyms: IMFS_utime ->   0xeb07
+rtl: esyms: IMFS_LIMITS_AND_OPTIONS ->  0x50024
+rtl: esyms: IMFS_chown ->   0xcb2b
+rtl: esyms: IMFS_create_node ->   0xcc3f
+rtl: esyms: IMFS_eval_path ->   0xd699
+rtl: esyms: IMFS_fchmod ->   0xd6db
+rtl: esyms: IMFS_initialize_node ->   0xea59
+rtl: esyms: IMFS_initialize_support ->   0xd86b
+rtl: esyms: IMFS_link ->   0xd99b
+rtl: esyms: IMFS_memfile_write ->   0xe2ef
+rtl: esyms: IMFS_mknod ->   0xe967
+rtl: esyms: IMFS_mknod_control_device ->  0x5027c
+rtl: esyms: IMFS_mknod_control_dir_default ->  0x50224
+rtl: esyms: IMFS_mknod_control_enosys ->  0x5030c
+rtl: esyms: IMFS_mknod_control_memfile ->  0x504f4
+rtl: esyms: IMFS_mount ->   0xe9f9
+rtl: esyms: IMFS_node_clone ->   0xeaeb
+rtl: esyms: IMFS_node_destroy ->   0xeb13
+rtl: esyms: IMFS_node_destroy_default ->   0xeb99
+rtl: esyms: IMFS_node_free ->   0xeb53
+rtl: esyms: IMFS_node_initialize_default ->   0xd93d
+rtl: esyms: IMFS_node_initialize_directory ->   0xce0b
+rtl: esyms: IMFS_node_remove_default ->   0xeb83
+rtl: esyms: IMFS_node_remove_directory ->   0xce4f
+rtl: esyms: IMFS_readlink ->   0xf0cb
+rtl: esyms: IMFS_rename ->   0xed73
+rtl: esyms: IMFS_rmnod ->   0xeedf
+rtl: esyms: IMFS_stat ->   0xefbd
+rtl: esyms: IMFS_stat_file ->   0xf033
+rtl: esyms: IMFS_symlink ->   0xf071
+rtl: esyms: IMFS_unmount ->   0xf1ad
+rtl: esyms: IMFS_utime ->   0xf20f
 rtl: esyms: Initialization_tasks -> 0x10140c
-rtl: esyms: RTEMS_Malloc_Area -> 0x102e78
+rtl: esyms: RTEMS_Malloc_Area -> 0x102f58
 rtl: esyms: RTEMS_Malloc_Heap -> 0x101408
-rtl: esyms: RTEMS_Malloc_Initialize ->   0xfd27
+rtl: esyms: RTEMS_Malloc_Initialize ->  0x1042f
 rtl: esyms: RamBase ->      0x0
 rtl: esyms: RamSize -> 0xfefc000
-rtl: esyms: Untar_FromMemory ->  0x32141
-rtl: esyms: Untar_FromMemory_Print ->  0x31fad
-rtl: esyms: WorkAreaBase -> 0x103a30
-rtl: esyms: _API_Mutex_Allocate ->  0x2345f
-rtl: esyms: _API_Mutex_Initialization ->  0x23431
-rtl: esyms: _API_Mutex_Is_owner ->  0x23521
-rtl: esyms: _API_Mutex_Lock ->  0x237cf
-rtl: esyms: _API_Mutex_Unlock ->  0x23b51
-rtl: esyms: _ARMV4_Exception_data_abort_default ->  0x31790
-rtl: esyms: _ARMV4_Exception_fiq_default ->  0x317c0
-rtl: esyms: _ARMV4_Exception_interrupt ->  0x31690
-rtl: esyms: _ARMV4_Exception_irq_default ->  0x317b0
-rtl: esyms: _ARMV4_Exception_pref_abort_default ->  0x31780
-rtl: esyms: _ARMV4_Exception_reserved_default ->  0x317a0
-rtl: esyms: _ARMV4_Exception_swi_default ->  0x31770
-rtl: esyms: _ARMV4_Exception_undef_default ->  0x31760
-rtl: esyms: _ARM_Exception_default ->  0x31675
-rtl: esyms: _Balloc ->  0x34899
-rtl: esyms: _Bfree ->  0x348e5
-rtl: esyms: _CORE_mutex_Seize_no_protocol_slow ->  0x23fb1
-rtl: esyms: _CORE_mutex_Seize_slow ->  0x23f19
-rtl: esyms: _CORE_semaphore_Initialize ->  0x24013
-rtl: esyms: _CPU_Context_Initialize ->  0x3196f
-rtl: esyms: _CPU_Context_restore ->  0x31a75
-rtl: esyms: _CPU_Context_restore_arm ->  0x31a78
-rtl: esyms: _CPU_Context_switch ->  0x31a35
-rtl: esyms: _CPU_Context_switch_arm ->  0x31a38
-rtl: esyms: _CPU_ISR_Get_level ->  0x319f9
-rtl: esyms: _CPU_ISR_Set_level ->  0x319c3
-rtl: esyms: _CPU_Initialize ->  0x31a25
-rtl: esyms: _CPU_Thread_Idle_body ->  0x31855
-rtl: esyms: _Chain_Initialize ->  0x23c01
-rtl: esyms: _Debug_Is_owner_of_allocator ->  0x24033
-rtl: esyms: _Event_Seize ->  0x1feb9
-rtl: esyms: _Event_Surrender ->  0x20423
-rtl: esyms: _Freechain_Get ->  0x242af
-rtl: esyms: _Freechain_Initialize ->  0x2425b
-rtl: esyms: _Freechain_Put ->  0x24339
-rtl: esyms: _Heap_Allocate_aligned_with_boundary ->  0x25349
-rtl: esyms: _Heap_Block_allocate ->  0x24d0b
-rtl: esyms: _Heap_Extend ->  0x25859
-rtl: esyms: _Heap_Free ->  0x25dc3
-rtl: esyms: _Heap_Get_first_and_last_block ->  0x24789
-rtl: esyms: _Heap_Initialize ->  0x2480d
-rtl: esyms: _Heap_Resize_block ->  0x263c3
-rtl: esyms: _IO_All_drivers_initialized -> 0x1038ec
+rtl: esyms: Untar_FromMemory ->  0x33cc9
+rtl: esyms: Untar_FromMemory_Print ->  0x33b35
+rtl: esyms: WorkAreaBase -> 0x103b30
+rtl: esyms: _API_Mutex_Allocate ->  0x2407f
+rtl: esyms: _API_Mutex_Initialization ->  0x24051
+rtl: esyms: _API_Mutex_Is_owner ->  0x24157
+rtl: esyms: _API_Mutex_Lock ->  0x243eb
+rtl: esyms: _API_Mutex_Unlock ->  0x246e9
+rtl: esyms: _ARMV4_Exception_data_abort_default ->  0x332f0
+rtl: esyms: _ARMV4_Exception_fiq_default ->  0x33320
+rtl: esyms: _ARMV4_Exception_interrupt ->  0x331c8
+rtl: esyms: _ARMV4_Exception_irq_default ->  0x33310
+rtl: esyms: _ARMV4_Exception_pref_abort_default ->  0x332e0
+rtl: esyms: _ARMV4_Exception_reserved_default ->  0x33300
+rtl: esyms: _ARMV4_Exception_swi_default ->  0x332d0
+rtl: esyms: _ARMV4_Exception_undef_default ->  0x332c0
+rtl: esyms: _ARM_Exception_default ->  0x331ad
+rtl: esyms: _Balloc ->  0x36499
+rtl: esyms: _Bfree ->  0x364e5
+rtl: esyms: _CORE_mutex_Seize_slow ->  0x24945
+rtl: esyms: _CORE_semaphore_Initialize ->  0x249a9
+rtl: esyms: _CPU_Context_Initialize ->  0x334cf
+rtl: esyms: _CPU_Context_restore ->  0x335ed
+rtl: esyms: _CPU_Context_restore_arm ->  0x335f0
+rtl: esyms: _CPU_Context_switch ->  0x33599
+rtl: esyms: _CPU_Context_switch_arm ->  0x3359c
+rtl: esyms: _CPU_ISR_Get_level ->  0x3355f
+rtl: esyms: _CPU_ISR_Set_level ->  0x33529
+rtl: esyms: _CPU_Initialize ->  0x3358b
+rtl: esyms: _CPU_Thread_Idle_body ->  0x333b5
+rtl: esyms: _Chain_Initialize ->  0x247a5
+rtl: esyms: _Debug_Is_owner_of_allocator ->  0x249c9
+rtl: esyms: _Event_Seize ->  0x20b0f
+rtl: esyms: _Event_Surrender ->  0x21079
+rtl: esyms: _Freechain_Get ->  0x24c45
+rtl: esyms: _Freechain_Initialize ->  0x24bf1
+rtl: esyms: _Freechain_Put ->  0x24ccf
+rtl: esyms: _Heap_Allocate_aligned_with_boundary ->  0x25cf5
+rtl: esyms: _Heap_Block_allocate ->  0x256b7
+rtl: esyms: _Heap_Extend ->  0x26205
+rtl: esyms: _Heap_Free ->  0x26785
+rtl: esyms: _Heap_Get_first_and_last_block ->  0x25135
+rtl: esyms: _Heap_Initialize ->  0x251b9
+rtl: esyms: _Heap_Resize_block ->  0x26d85
+rtl: esyms: _IO_All_drivers_initialized -> 0x1039d0
 rtl: esyms: _IO_Driver_address_table -> 0x101428
-rtl: esyms: _IO_Initialize_all_drivers ->  0x23131
-rtl: esyms: _IO_Number_of_drivers ->  0x3b694
-rtl: esyms: _ISR_Handler_initialization ->  0x26501
-rtl: esyms: _ISR_Is_in_progress ->  0x2651b
-rtl: esyms: _Internal_errors_What_happened -> 0x1038f0
-rtl: esyms: _Linker_set__Sysinit__IO_Initialize_all_drivers ->  0x5341c
-rtl: esyms: _Linker_set__Sysinit__POSIX_Keys_Manager_initialization ->  0x53408
-rtl: esyms: _Linker_set__Sysinit__POSIX_signals_Manager_Initialization ->  0x53404
-rtl: esyms: _Linker_set__Sysinit__RTEMS_tasks_Initialize_user_tasks_body ->  0x53420
-rtl: esyms: _Linker_set__Sysinit__RTEMS_tasks_Manager_initialization ->  0x533fc
-rtl: esyms: _Linker_set__Sysinit__Semaphore_Manager_initialization ->  0x53400
-rtl: esyms: _Linker_set__Sysinit__Thread_Create_idle ->  0x5340c
-rtl: esyms: _Linker_set__Sysinit__User_extensions_Handler_initialization ->  0x533f4
-rtl: esyms: _Linker_set__Sysinit_begin ->  0x533ec
-rtl: esyms: _Linker_set__Sysinit_bsp_predriver_hook ->  0x53418
-rtl: esyms: _Linker_set__Sysinit_bsp_start ->  0x533f0
-rtl: esyms: _Linker_set__Sysinit_bsp_work_area_initialize ->  0x533ec
-rtl: esyms: _Linker_set__Sysinit_end ->  0x53428
-rtl: esyms: _Linker_set__Sysinit_rtems_filesystem_initialize ->  0x53414
-rtl: esyms: _Linker_set__Sysinit_rtems_initialize_data_structures ->  0x533f8
-rtl: esyms: _Linker_set__Sysinit_rtems_libio_init ->  0x53410
-rtl: esyms: _Linker_set__Sysinit_rtems_libio_post_driver ->  0x53424
-rtl: esyms: _Malloc_Deferred_free ->   0xfcef
-rtl: esyms: _Malloc_Process_deferred_frees ->   0xfc23
-rtl: esyms: _Malloc_System_state ->   0xfbab
-rtl: esyms: _Mutex_Acquire ->  0x26fd7
-rtl: esyms: _Mutex_Release ->  0x27053
-rtl: esyms: _Mutex_recursive_Acquire ->  0x270d1
-rtl: esyms: _Mutex_recursive_Release ->  0x27173
-rtl: esyms: _Objects_API_maximum_class ->  0x274b9
-rtl: esyms: _Objects_Allocate ->  0x2749d
-rtl: esyms: _Objects_Allocate_unprotected ->  0x273d1
-rtl: esyms: _Objects_Close ->  0x275ab
-rtl: esyms: _Objects_Do_initialize_information ->  0x27edb
-rtl: esyms: _Objects_Extend_information ->  0x277b1
-rtl: esyms: _Objects_Free ->  0x27b77
-rtl: esyms: _Objects_Get ->  0x27d5d
-rtl: esyms: _Objects_Get_information ->  0x27c2f
-rtl: esyms: _Objects_Get_information_id ->  0x27cf1
-rtl: esyms: _Objects_Get_no_protection ->  0x27db7
-rtl: esyms: _Objects_Information_table ->  0x4f5f8
-rtl: esyms: _Objects_Namespace_remove ->  0x27fc3
-rtl: esyms: _Objects_Shrink_information ->  0x280bb
-rtl: esyms: _Once_Mutex -> 0x1038e8
-rtl: esyms: _POSIX_Keys_Information -> 0x103520
-rtl: esyms: _POSIX_Keys_Key_value_allocate ->  0x1ce6b
-rtl: esyms: _POSIX_Keys_Keypool -> 0x103514
-rtl: esyms: _POSIX_signals_Abnormal_termination_handler ->  0x1e67f
-rtl: esyms: _POSIX_signals_Clear_process_signals ->  0x1e7c3
-rtl: esyms: _POSIX_signals_Clear_signals ->  0x1ec11
-rtl: esyms: _POSIX_signals_Default_vectors ->  0x4e268
-rtl: esyms: _POSIX_signals_Inactive_siginfo -> 0x103558
-rtl: esyms: _POSIX_signals_Pending -> 0x103864
-rtl: esyms: _POSIX_signals_Send ->  0x1e25d
-rtl: esyms: _POSIX_signals_Set_process_signals ->  0x1eee7
-rtl: esyms: _POSIX_signals_Siginfo -> 0x103564
-rtl: esyms: _POSIX_signals_Unblock_thread ->  0x1f575
-rtl: esyms: _POSIX_signals_Vectors -> 0x1036e4
-rtl: esyms: _POSIX_signals_Wait_queue -> 0x102b18
-rtl: esyms: _Per_CPU_Information -> 0x103900
-rtl: esyms: _Protected_heap_Free ->  0x2821d
-rtl: esyms: _RBTree_Extract ->  0x287a3
-rtl: esyms: _RBTree_Insert_color ->  0x28a29
-rtl: esyms: _RBTree_Minimum ->  0x28a85
-rtl: esyms: _RTEMS_Allocator_Mutex -> 0x1038e4
-rtl: esyms: _RTEMS_tasks_Information -> 0x1038a0
-rtl: esyms: _RTEMS_tasks_Initialize_user_tasks_body ->  0x228e1
-rtl: esyms: _RTEMS_tasks_User_extensions -> 0x101694
-rtl: esyms: _Scheduler_Handler_initialization ->  0x28aa1
-rtl: esyms: _Scheduler_Table ->  0x3b640
-rtl: esyms: _Scheduler_default_Cancel_job ->  0x28b33
-rtl: esyms: _Scheduler_default_Map_priority ->  0x28ae5
-rtl: esyms: _Scheduler_default_Node_destroy ->  0x28b01
-rtl: esyms: _Scheduler_default_Release_job ->  0x28b17
-rtl: esyms: _Scheduler_default_Start_idle ->  0x28bcd
-rtl: esyms: _Scheduler_default_Tick ->  0x28c09
-rtl: esyms: _Scheduler_priority_Block ->  0x29601
-rtl: esyms: _Scheduler_priority_Initialize ->  0x28f21
-rtl: esyms: _Scheduler_priority_Node_initialize ->  0x28f57
-rtl: esyms: _Scheduler_priority_Schedule ->  0x2a313
-rtl: esyms: _Scheduler_priority_Unblock ->  0x2a7cf
-rtl: esyms: _Scheduler_priority_Update_priority ->  0x29ec7
-rtl: esyms: _Scheduler_priority_Yield ->  0x2ad99
-rtl: esyms: _Semaphore_Information -> 0x103868
-rtl: esyms: _System_state_Current -> 0x1038fc
+rtl: esyms: _IO_Initialize_all_drivers ->  0x23d51
+rtl: esyms: _IO_Number_of_drivers ->  0x3d2f4
+rtl: esyms: _ISR_Handler_initialization ->  0x26ec3
+rtl: esyms: _ISR_Is_in_progress ->  0x26edd
+rtl: esyms: _Internal_errors_What_happened -> 0x1039d4
+rtl: esyms: _Linker_set__Sysinit__IO_Initialize_all_drivers ->  0x58448
+rtl: esyms: _Linker_set__Sysinit__POSIX_Keys_Manager_initialization ->  0x58434
+rtl: esyms: _Linker_set__Sysinit__POSIX_signals_Manager_Initialization ->  0x58430
+rtl: esyms: _Linker_set__Sysinit__RTEMS_tasks_Initialize_user_tasks_body ->  0x5844c
+rtl: esyms: _Linker_set__Sysinit__RTEMS_tasks_Manager_initialization ->  0x58428
+rtl: esyms: _Linker_set__Sysinit__Semaphore_Manager_initialization ->  0x5842c
+rtl: esyms: _Linker_set__Sysinit__Thread_Create_idle ->  0x58438
+rtl: esyms: _Linker_set__Sysinit__User_extensions_Handler_initialization ->  0x58420
+rtl: esyms: _Linker_set__Sysinit_begin ->  0x58418
+rtl: esyms: _Linker_set__Sysinit_bsp_predriver_hook ->  0x58444
+rtl: esyms: _Linker_set__Sysinit_bsp_start ->  0x5841c
+rtl: esyms: _Linker_set__Sysinit_bsp_work_area_initialize ->  0x58418
+rtl: esyms: _Linker_set__Sysinit_end ->  0x58454
+rtl: esyms: _Linker_set__Sysinit_rtems_filesystem_initialize ->  0x58440
+rtl: esyms: _Linker_set__Sysinit_rtems_initialize_data_structures ->  0x58424
+rtl: esyms: _Linker_set__Sysinit_rtems_libio_init ->  0x5843c
+rtl: esyms: _Linker_set__Sysinit_rtems_libio_post_driver ->  0x58450
+rtl: esyms: _Malloc_Deferred_free ->  0x103f7
+rtl: esyms: _Malloc_Process_deferred_frees ->  0x1032b
+rtl: esyms: _Malloc_System_state ->  0x102b3
+rtl: esyms: _Mutex_Acquire ->  0x279b3
+rtl: esyms: _Mutex_Release ->  0x27a37
+rtl: esyms: _Mutex_recursive_Acquire ->  0x27abb
+rtl: esyms: _Mutex_recursive_Release ->  0x27b63
+rtl: esyms: _Objects_API_maximum_class ->  0x27eaf
+rtl: esyms: _Objects_Allocate ->  0x27e93
+rtl: esyms: _Objects_Allocate_unprotected ->  0x27dc7
+rtl: esyms: _Objects_Close ->  0x27fa1
+rtl: esyms: _Objects_Do_initialize_information ->  0x288d1
+rtl: esyms: _Objects_Extend_information ->  0x281a7
+rtl: esyms: _Objects_Free ->  0x2856d
+rtl: esyms: _Objects_Get ->  0x28753
+rtl: esyms: _Objects_Get_information ->  0x28625
+rtl: esyms: _Objects_Get_information_id ->  0x286e7
+rtl: esyms: _Objects_Get_no_protection ->  0x287ad
+rtl: esyms: _Objects_Information_table ->  0x53dfc
+rtl: esyms: _Objects_Namespace_remove ->  0x289b9
+rtl: esyms: _Objects_Shrink_information ->  0x28ab1
+rtl: esyms: _Once_Mutex -> 0x1039cc
+rtl: esyms: _POSIX_Keys_Information -> 0x103604
+rtl: esyms: _POSIX_Keys_Key_value_allocate ->  0x1db13
+rtl: esyms: _POSIX_Keys_Keypool -> 0x1035f8
+rtl: esyms: _POSIX_signals_Abnormal_termination_handler ->  0x1f395
+rtl: esyms: _POSIX_signals_Clear_process_signals ->  0x1f4d9
+rtl: esyms: _POSIX_signals_Clear_signals ->  0x1f8a3
+rtl: esyms: _POSIX_signals_Default_vectors ->  0x52a94
+rtl: esyms: _POSIX_signals_Inactive_siginfo -> 0x10363c
+rtl: esyms: _POSIX_signals_Pending -> 0x103948
+rtl: esyms: _POSIX_signals_Send ->  0x1ef0f
+rtl: esyms: _POSIX_signals_Set_process_signals ->  0x1faf5
+rtl: esyms: _POSIX_signals_Siginfo -> 0x103648
+rtl: esyms: _POSIX_signals_Unblock_thread ->  0x2019b
+rtl: esyms: _POSIX_signals_Vectors -> 0x1037c8
+rtl: esyms: _POSIX_signals_Wait_queue -> 0x102bfc
+rtl: esyms: _Per_CPU_Information -> 0x103a00
+rtl: esyms: _Protected_heap_Free ->  0x28c13
+rtl: esyms: _RBTree_Extract ->  0x291b5
+rtl: esyms: _RBTree_Insert_color ->  0x29463
+rtl: esyms: _RBTree_Minimum ->  0x294eb
+rtl: esyms: _RTEMS_Allocator_Mutex -> 0x1039c8
+rtl: esyms: _RTEMS_tasks_Information -> 0x103984
+rtl: esyms: _RTEMS_tasks_Initialize_user_tasks_body ->  0x23537
+rtl: esyms: _RTEMS_tasks_User_extensions -> 0x10167c
+rtl: esyms: _Scheduler_Handler_initialization ->  0x29507
+rtl: esyms: _Scheduler_Table ->  0x3d2a0
+rtl: esyms: _Scheduler_default_Cancel_job ->  0x29595
+rtl: esyms: _Scheduler_default_Map_priority ->  0x2954b
+rtl: esyms: _Scheduler_default_Node_destroy ->  0x29567
+rtl: esyms: _Scheduler_default_Release_job ->  0x2957d
+rtl: esyms: _Scheduler_default_Start_idle ->  0x2960f
+rtl: esyms: _Scheduler_default_Tick ->  0x29649
+rtl: esyms: _Scheduler_priority_Block ->  0x2a04d
+rtl: esyms: _Scheduler_priority_Initialize ->  0x29967
+rtl: esyms: _Scheduler_priority_Node_initialize ->  0x2999d
+rtl: esyms: _Scheduler_priority_Schedule ->  0x2ad4b
+rtl: esyms: _Scheduler_priority_Unblock ->  0x2b247
+rtl: esyms: _Scheduler_priority_Update_priority ->  0x2a8ff
+rtl: esyms: _Scheduler_priority_Yield ->  0x2b7e7
+rtl: esyms: _Semaphore_Information -> 0x10394c
+rtl: esyms: _System_state_Current -> 0x1039e0
 rtl: esyms: _TLS_Alignment ->      0x1
-rtl: esyms: _TLS_BSS_begin ->  0x533c4
-rtl: esyms: _TLS_BSS_end ->  0x533c4
+rtl: esyms: _TLS_BSS_begin ->  0x583f0
+rtl: esyms: _TLS_BSS_end ->  0x583f0
 rtl: esyms: _TLS_BSS_size ->      0x0
-rtl: esyms: _TLS_Data_begin ->  0x533c4
+rtl: esyms: _TLS_Data_begin ->  0x583f0
 rtl: esyms: _TLS_Data_size ->      0x0
 rtl: esyms: _TLS_Size ->      0x0
-rtl: esyms: _Terminate ->  0x264ab
-rtl: esyms: _Thread_Apply_priority ->  0x2b28b
-rtl: esyms: _Thread_Cancel ->  0x2f275
-rtl: esyms: _Thread_Change_life ->  0x2f525
-rtl: esyms: _Thread_Change_priority ->  0x2b30d
-rtl: esyms: _Thread_Clear_state ->  0x2b6ef
-rtl: esyms: _Thread_Clear_state_locked ->  0x2b65b
-rtl: esyms: _Thread_Close ->  0x2f36f
-rtl: esyms: _Thread_Control_add_on_count ->  0x3b728
-rtl: esyms: _Thread_Control_add_ons ->  0x3b708
-rtl: esyms: _Thread_Control_size ->  0x3b704
-rtl: esyms: _Thread_Create_idle ->  0x2b985
-rtl: esyms: _Thread_Dispatch ->  0x2bf01
-rtl: esyms: _Thread_Do_dispatch ->  0x2be05
-rtl: esyms: _Thread_Entry_adaptor_idle ->  0x2bf47
-rtl: esyms: _Thread_Entry_adaptor_numeric ->  0x2bf65
-rtl: esyms: _Thread_Exit ->  0x2f3c7
-rtl: esyms: _Thread_Get ->  0x2c055
-rtl: esyms: _Thread_Global_construction ->  0x2c0cd
-rtl: esyms: _Thread_Handler ->  0x2c179
-rtl: esyms: _Thread_Handler_initialization ->  0x2ae59
-rtl: esyms: _Thread_Initialize ->  0x2c5fd
-rtl: esyms: _Thread_Initialize_information ->  0x2adff
-rtl: esyms: _Thread_Internal_information -> 0x103940
-rtl: esyms: _Thread_Join ->  0x2f1cd
-rtl: esyms: _Thread_Kill_zombies ->  0x2eddb
-rtl: esyms: _Thread_Load_environment ->  0x2c895
-rtl: esyms: _Thread_Raise_priority ->  0x2b36b
-rtl: esyms: _Thread_Restart_self ->  0x2f469
-rtl: esyms: _Thread_Restore_priority ->  0x2b3dd
-rtl: esyms: _Thread_Set_life_protection ->  0x2f57b
-rtl: esyms: _Thread_Set_priority ->  0x2f663
-rtl: esyms: _Thread_Set_state ->  0x2f969
-rtl: esyms: _Thread_Set_state_locked ->  0x2f8df
-rtl: esyms: _Thread_Stack_Allocate ->  0x2f9dd
-rtl: esyms: _Thread_Stack_Free ->  0x2fa23
-rtl: esyms: _Thread_Start ->  0x2fcbd
-rtl: esyms: _Thread_Start_multitasking ->  0x2fd73
-rtl: esyms: _Thread_Timeout ->  0x2ffa3
-rtl: esyms: _Thread_Update_priority ->  0x2b2d9
-rtl: esyms: _Thread_Yield ->  0x3029b
-rtl: esyms: _Thread_queue_Deadlock_fatal ->  0x2cf85
-rtl: esyms: _Thread_queue_Deadlock_status ->  0x2cf69
-rtl: esyms: _Thread_queue_Do_extract_locked ->  0x2d147
-rtl: esyms: _Thread_queue_Enqueue_critical ->  0x2cf9f
-rtl: esyms: _Thread_queue_Extract ->  0x2d1e3
-rtl: esyms: _Thread_queue_Extract_critical ->  0x2d1b3
-rtl: esyms: _Thread_queue_Extract_with_proxy ->  0x2d2cf
-rtl: esyms: _Thread_queue_Flush_critical ->  0x2d679
-rtl: esyms: _Thread_queue_Flush_status_object_was_deleted ->  0x2d657
-rtl: esyms: _Thread_queue_Initialize ->  0x2c925
-rtl: esyms: _Thread_queue_Operations_FIFO ->  0x51700
-rtl: esyms: _Thread_queue_Operations_default ->  0x516ec
-rtl: esyms: _Thread_queue_Operations_priority ->  0x51714
-rtl: esyms: _Thread_queue_Operations_priority_inherit ->  0x51728
-rtl: esyms: _Thread_queue_Surrender ->  0x2d253
-rtl: esyms: _Thread_queue_Unblock_critical ->  0x2d16d
-rtl: esyms: _Timecounter -> 0x10175c
-rtl: esyms: _Timecounter_Bintime ->  0x26841
-rtl: esyms: _Timecounter_Binuptime ->  0x267cd
-rtl: esyms: _Timecounter_Boottimebin -> 0x101770
-rtl: esyms: _Timecounter_Getnanotime ->  0x2688b
-rtl: esyms: _Timecounter_Install ->  0x268d1
-rtl: esyms: _Timecounter_Microtime ->  0x26865
-rtl: esyms: _Timecounter_Tick ->  0x26c29
-rtl: esyms: _Timecounter_Tick_simple ->  0x26c57
-rtl: esyms: _Timecounter_Time_second -> 0x101764
-rtl: esyms: _Timecounter_Time_uptime -> 0x101768
-rtl: esyms: _Unwind_Backtrace ->   0x9fc1
-rtl: esyms: _Unwind_Complete ->   0x9755
-rtl: esyms: _Unwind_DeleteException ->   0x9759
-rtl: esyms: _Unwind_ForcedUnwind ->   0x9f9d
-rtl: esyms: _Unwind_GetCFA ->   0x9685
-rtl: esyms: _Unwind_GetDataRelBase ->   0xa365
-rtl: esyms: _Unwind_GetLanguageSpecificData ->   0xa349
-rtl: esyms: _Unwind_GetRegionStart ->   0xa33d
-rtl: esyms: _Unwind_GetTextRelBase ->   0xa35d
-rtl: esyms: _Unwind_RaiseException ->   0x9f31
-rtl: esyms: _Unwind_Resume ->   0x9f55
-rtl: esyms: _Unwind_Resume_or_Rethrow ->   0x9f79
-rtl: esyms: _Unwind_VRS_Get ->   0x9765
-rtl: esyms: _Unwind_VRS_Pop ->   0x9bad
-rtl: esyms: _Unwind_VRS_Set ->   0x97b9
-rtl: esyms: _User_extensions_Add_set ->  0x30589
-rtl: esyms: _User_extensions_Fatal_visitor ->  0x309cd
-rtl: esyms: _User_extensions_Handler_initialization ->  0x303ad
-rtl: esyms: _User_extensions_Iterate ->  0x30a29
-rtl: esyms: _User_extensions_List -> 0x101798
-rtl: esyms: _User_extensions_Switches_list -> 0x101780
-rtl: esyms: _User_extensions_Thread_begin_visitor ->  0x30981
-rtl: esyms: _User_extensions_Thread_create_visitor ->  0x308bb
-rtl: esyms: _User_extensions_Thread_delete_visitor ->  0x30909
-rtl: esyms: _User_extensions_Thread_exitted_visitor ->  0x309a7
-rtl: esyms: _User_extensions_Thread_restart_visitor ->  0x30959
-rtl: esyms: _User_extensions_Thread_start_visitor ->  0x30931
-rtl: esyms: _User_extensions_Thread_terminate_visitor ->  0x30a01
-rtl: esyms: _Watchdog_Do_tickle ->  0x310ed
-rtl: esyms: _Watchdog_Insert ->  0x30c5f
-rtl: esyms: _Watchdog_Remove ->  0x30e11
-rtl: esyms: _Watchdog_Tick ->  0x3116d
-rtl: esyms: _Watchdog_Ticks_since_boot -> 0x103984
-rtl: esyms: _Workspace_Allocate ->  0x315df
-rtl: esyms: _Workspace_Allocate_aligned ->  0x31601
-rtl: esyms: _Workspace_Allocate_or_fatal_error ->  0x31643
-rtl: esyms: _Workspace_Area -> 0x103988
-rtl: esyms: _Workspace_Free ->  0x31625
-rtl: esyms: _Workspace_Handler_initialization ->  0x31435
-rtl: esyms: _ZGTtNKSt13bad_exception4whatEv ->   0x14bd
-rtl: esyms: _ZN10__cxxabiv111__terminateEPFvvE ->   0x1c09
-rtl: esyms: _ZN10__cxxabiv112__unexpectedEPFvvE ->   0x1c45
-rtl: esyms: _ZN10__cxxabiv117__class_type_infoD0Ev ->    0xe69
-rtl: esyms: _ZN10__cxxabiv117__class_type_infoD1Ev ->    0xe55
-rtl: esyms: _ZN10__cxxabiv117__class_type_infoD2Ev ->    0xe55
+rtl: esyms: _Terminate ->  0x26e6d
+rtl: esyms: _Thread_Cancel ->  0x30f4f
+rtl: esyms: _Thread_Change_life ->  0x3124b
+rtl: esyms: _Thread_Clear_state ->  0x2c5f9
+rtl: esyms: _Thread_Clear_state_locked ->  0x2c565
+rtl: esyms: _Thread_Close ->  0x3106f
+rtl: esyms: _Thread_Control_add_on_count ->  0x3d388
+rtl: esyms: _Thread_Control_add_ons ->  0x3d368
+rtl: esyms: _Thread_Control_size ->  0x3d364
+rtl: esyms: _Thread_Create_idle ->  0x2c851
+rtl: esyms: _Thread_Dispatch_direct ->  0x2cd91
+rtl: esyms: _Thread_Do_dispatch ->  0x2cc97
+rtl: esyms: _Thread_Entry_adaptor_idle ->  0x2cdc1
+rtl: esyms: _Thread_Entry_adaptor_numeric ->  0x2cddf
+rtl: esyms: _Thread_Exit ->  0x310b9
+rtl: esyms: _Thread_Get ->  0x2cee7
+rtl: esyms: _Thread_Global_construction ->  0x2cf7b
+rtl: esyms: _Thread_Handler ->  0x2d041
+rtl: esyms: _Thread_Handler_initialization ->  0x2b8a9
+rtl: esyms: _Thread_Initialize ->  0x2d615
+rtl: esyms: _Thread_Initialize_information ->  0x2b84f
+rtl: esyms: _Thread_Internal_information -> 0x103a40
+rtl: esyms: _Thread_Join ->  0x30ea3
+rtl: esyms: _Thread_Kill_zombies ->  0x30ae1
+rtl: esyms: _Thread_Load_environment ->  0x2d8a9
+rtl: esyms: _Thread_Priority_add ->  0x2c2af
+rtl: esyms: _Thread_Priority_changed ->  0x2c2f7
+rtl: esyms: _Thread_Priority_perform_actions ->  0x2c17d
+rtl: esyms: _Thread_Priority_remove ->  0x2c2d3
+rtl: esyms: _Thread_Priority_update ->  0x2c321
+rtl: esyms: _Thread_Restart_self ->  0x3115b
+rtl: esyms: _Thread_Set_life_protection ->  0x312a1
+rtl: esyms: _Thread_Set_state ->  0x3153f
+rtl: esyms: _Thread_Set_state_locked ->  0x314b5
+rtl: esyms: _Thread_Stack_Allocate ->  0x315b3
+rtl: esyms: _Thread_Stack_Free ->  0x315f9
+rtl: esyms: _Thread_Start ->  0x31857
+rtl: esyms: _Thread_Start_multitasking ->  0x3190d
+rtl: esyms: _Thread_Timeout ->  0x31b47
+rtl: esyms: _Thread_Yield ->  0x31dff
+rtl: esyms: _Thread_queue_Deadlock_fatal ->  0x2dfcf
+rtl: esyms: _Thread_queue_Deadlock_status ->  0x2dfb3
+rtl: esyms: _Thread_queue_Enqueue ->  0x2e04b
+rtl: esyms: _Thread_queue_Enqueue_do_nothing ->  0x2df9b
+rtl: esyms: _Thread_queue_Extract ->  0x2e2cf
+rtl: esyms: _Thread_queue_Extract_critical ->  0x2e29d
+rtl: esyms: _Thread_queue_Extract_locked ->  0x2e227
+rtl: esyms: _Thread_queue_Extract_with_proxy ->  0x2e3d7
+rtl: esyms: _Thread_queue_Flush_critical ->  0x2e7c7
+rtl: esyms: _Thread_queue_Flush_status_object_was_deleted ->  0x2e7a5
+rtl: esyms: _Thread_queue_Initialize ->  0x2d937
+rtl: esyms: _Thread_queue_Operations_FIFO ->  0x56624
+rtl: esyms: _Thread_queue_Operations_default ->  0x56610
+rtl: esyms: _Thread_queue_Operations_priority ->  0x56638
+rtl: esyms: _Thread_queue_Operations_priority_inherit ->  0x5664c
+rtl: esyms: _Thread_queue_Surrender ->  0x2e341
+rtl: esyms: _Thread_queue_Unblock_critical ->  0x2e257
+rtl: esyms: _Timecounter -> 0x101744
+rtl: esyms: _Timecounter_Bintime ->  0x27203
+rtl: esyms: _Timecounter_Binuptime ->  0x2718f
+rtl: esyms: _Timecounter_Boottimebin -> 0x101758
+rtl: esyms: _Timecounter_Getnanotime ->  0x2724d
+rtl: esyms: _Timecounter_Install ->  0x27293
+rtl: esyms: _Timecounter_Microtime ->  0x27227
+rtl: esyms: _Timecounter_Tick ->  0x275eb
+rtl: esyms: _Timecounter_Tick_simple ->  0x27619
+rtl: esyms: _Timecounter_Time_second -> 0x10174c
+rtl: esyms: _Timecounter_Time_uptime -> 0x101750
+rtl: esyms: _Unwind_Backtrace ->   0xa629
+rtl: esyms: _Unwind_Complete ->   0x9dbd
+rtl: esyms: _Unwind_DeleteException ->   0x9dc1
+rtl: esyms: _Unwind_ForcedUnwind ->   0xa605
+rtl: esyms: _Unwind_GetCFA ->   0x9ced
+rtl: esyms: _Unwind_GetDataRelBase ->   0xa9cd
+rtl: esyms: _Unwind_GetLanguageSpecificData ->   0xa9b1
+rtl: esyms: _Unwind_GetRegionStart ->   0xa9a5
+rtl: esyms: _Unwind_GetTextRelBase ->   0xa9c5
+rtl: esyms: _Unwind_RaiseException ->   0xa599
+rtl: esyms: _Unwind_Resume ->   0xa5bd
+rtl: esyms: _Unwind_Resume_or_Rethrow ->   0xa5e1
+rtl: esyms: _Unwind_VRS_Get ->   0x9dcd
+rtl: esyms: _Unwind_VRS_Pop ->   0xa215
+rtl: esyms: _Unwind_VRS_Set ->   0x9e21
+rtl: esyms: _User_extensions_Add_set ->  0x320ed
+rtl: esyms: _User_extensions_Fatal_visitor ->  0x32547
+rtl: esyms: _User_extensions_Handler_initialization ->  0x31f11
+rtl: esyms: _User_extensions_Iterate ->  0x325a1
+rtl: esyms: _User_extensions_List -> 0x101780
+rtl: esyms: _User_extensions_Switches_list -> 0x101768
+rtl: esyms: _User_extensions_Thread_begin_visitor ->  0x324fb
+rtl: esyms: _User_extensions_Thread_create_visitor ->  0x32435
+rtl: esyms: _User_extensions_Thread_delete_visitor ->  0x32483
+rtl: esyms: _User_extensions_Thread_exitted_visitor ->  0x32521
+rtl: esyms: _User_extensions_Thread_restart_visitor ->  0x324d3
+rtl: esyms: _User_extensions_Thread_start_visitor ->  0x324ab
+rtl: esyms: _User_extensions_Thread_terminate_visitor ->  0x3257b
+rtl: esyms: _Watchdog_Do_tickle ->  0x32c25
+rtl: esyms: _Watchdog_Insert ->  0x327dd
+rtl: esyms: _Watchdog_Remove ->  0x3298f
+rtl: esyms: _Watchdog_Tick ->  0x32ca5
+rtl: esyms: _Watchdog_Ticks_since_boot -> 0x103a84
+rtl: esyms: _Workspace_Allocate ->  0x33117
+rtl: esyms: _Workspace_Allocate_aligned ->  0x33139
+rtl: esyms: _Workspace_Allocate_or_fatal_error ->  0x3317b
+rtl: esyms: _Workspace_Area -> 0x103a88
+rtl: esyms: _Workspace_Free ->  0x3315d
+rtl: esyms: _Workspace_Handler_initialization ->  0x32f6d
+rtl: esyms: _ZGTtNKSt13bad_exception4whatEv ->   0x1675
+rtl: esyms: _ZN10__cxxabiv111__terminateEPFvvE ->   0x1dc1
+rtl: esyms: _ZN10__cxxabiv112__unexpectedEPFvvE ->   0x1dfd
+rtl: esyms: _ZN10__cxxabiv117__class_type_infoD0Ev ->   0x1021
+rtl: esyms: _ZN10__cxxabiv117__class_type_infoD1Ev ->   0x100d
+rtl: esyms: _ZN10__cxxabiv117__class_type_infoD2Ev ->   0x100d
 rtl: esyms: _ZN10__cxxabiv119__terminate_handlerE -> 0x101488
-rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD0Ev ->   0x1e35
-rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD1Ev ->   0x1e21
-rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD2Ev ->   0x1e21
+rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD0Ev ->   0x1fed
+rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD1Ev ->   0x1fd9
+rtl: esyms: _ZN10__cxxabiv120__si_class_type_infoD2Ev ->   0x1fd9
 rtl: esyms: _ZN10__cxxabiv120__unexpected_handlerE -> 0x10148c
-rtl: esyms: _ZN9__gnu_cxx27__verbose_terminate_handlerEv ->   0x1f8d
-rtl: esyms: _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj ->    0xe9d
-rtl: esyms: _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE ->    0xe85
-rtl: esyms: _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv ->    0xe11
-rtl: esyms: _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE ->    0xec9
-rtl: esyms: _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_ ->    0xe49
-rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE ->   0x1f2d
-rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE ->   0x1e8d
-rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_ ->   0x1e51
-rtl: esyms: _ZNKSt11logic_error4whatEv ->   0x8465
-rtl: esyms: _ZNKSt13bad_exception4whatEv ->   0x14bd
-rtl: esyms: _ZNKSt13runtime_error4whatEv ->   0x8469
-rtl: esyms: _ZNKSt3_V214error_category10_M_messageB5cxx11Ei ->   0x86a5
-rtl: esyms: _ZNKSt3_V214error_category10equivalentERKSt10error_codei ->   0x866d
-rtl: esyms: _ZNKSt3_V214error_category10equivalentEiRKSt15error_condition ->   0x8771
-rtl: esyms: _ZNKSt3_V214error_category23default_error_conditionEi ->   0x8665
-rtl: esyms: _ZNKSt9bad_alloc4whatEv ->    0xdd5
-rtl: esyms: _ZNKSt9type_info14__is_pointer_pEv ->   0x1f5d
-rtl: esyms: _ZNKSt9type_info15__is_function_pEv ->   0x1f5d
-rtl: esyms: _ZNKSt9type_infoeqERKS_ ->   0x1f61
-rtl: esyms: _ZNSt11logic_errorC1EPKc ->   0x856d
-rtl: esyms: _ZNSt11logic_errorC2EPKc ->   0x856d
-rtl: esyms: _ZNSt11logic_errorD0Ev ->   0x84c1
-rtl: esyms: _ZNSt11logic_errorD1Ev ->   0x846d
-rtl: esyms: _ZNSt11logic_errorD2Ev ->   0x846d
-rtl: esyms: _ZNSt12__cow_stringC1EPKcj ->   0x85d1
-rtl: esyms: _ZNSt12__cow_stringC2EPKcj ->   0x85d1
-rtl: esyms: _ZNSt12length_errorC1EPKc ->   0x8595
-rtl: esyms: _ZNSt12length_errorC2EPKc ->   0x8595
-rtl: esyms: _ZNSt12length_errorD0Ev ->   0x84e9
-rtl: esyms: _ZNSt12length_errorD1Ev ->   0x84d5
-rtl: esyms: _ZNSt12length_errorD2Ev ->   0x84d5
-rtl: esyms: _ZNSt13bad_exceptionD0Ev ->   0x14c9
-rtl: esyms: _ZNSt13bad_exceptionD1Ev ->   0x14b9
-rtl: esyms: _ZNSt13bad_exceptionD2Ev ->   0x14b9
-rtl: esyms: _ZNSt13runtime_errorC1EPKc ->   0x85a9
-rtl: esyms: _ZNSt13runtime_errorC2EPKc ->   0x85a9
-rtl: esyms: _ZNSt13runtime_errorD0Ev ->   0x8559
-rtl: esyms: _ZNSt13runtime_errorD1Ev ->   0x8505
-rtl: esyms: _ZNSt13runtime_errorD2Ev ->   0x8505
-rtl: esyms: _ZNSt9bad_allocD0Ev ->    0xdf5
-rtl: esyms: _ZNSt9bad_allocD1Ev ->    0xde1
-rtl: esyms: _ZNSt9bad_allocD2Ev ->    0xde1
-rtl: esyms: _ZNSt9exceptionD1Ev ->   0x14b5
-rtl: esyms: _ZNSt9exceptionD2Ev ->   0x14b5
-rtl: esyms: _ZNSt9type_infoD1Ev ->   0x1f59
-rtl: esyms: _ZNSt9type_infoD2Ev ->   0x1f59
-rtl: esyms: _ZSt10unexpectedv ->   0x1c4d
-rtl: esyms: _ZSt13get_terminatev ->   0x1c61
-rtl: esyms: _ZSt14get_unexpectedv ->   0x1c71
-rtl: esyms: _ZSt15get_new_handlerv ->   0x1dd1
-rtl: esyms: _ZSt19__throw_logic_errorPKc ->   0x85e5
-rtl: esyms: _ZSt20__throw_length_errorPKc ->   0x8619
-rtl: esyms: _ZSt9terminatev ->   0x1c31
-rtl: esyms: _ZTIN10__cxxabiv115__forced_unwindE ->  0x4a524
-rtl: esyms: _ZTIN10__cxxabiv117__class_type_infoE ->  0x4a4b4
-rtl: esyms: _ZTIN10__cxxabiv119__foreign_exceptionE ->  0x4a52c
-rtl: esyms: _ZTIN10__cxxabiv120__si_class_type_infoE ->  0x4a5c4
-rtl: esyms: _ZTINSt3_V214error_categoryE ->  0x4b6f0
-rtl: esyms: _ZTISt11logic_error ->  0x4b604
-rtl: esyms: _ZTISt12length_error ->  0x4b610
-rtl: esyms: _ZTISt13bad_exception ->  0x4a534
-rtl: esyms: _ZTISt13runtime_error ->  0x4b61c
-rtl: esyms: _ZTISt9bad_alloc ->  0x4a484
-rtl: esyms: _ZTISt9exception ->  0x4a540
-rtl: esyms: _ZTISt9type_info ->  0x4a624
-rtl: esyms: _ZTSN10__cxxabiv115__forced_unwindE ->  0x4a548
-rtl: esyms: _ZTSN10__cxxabiv117__class_type_infoE ->  0x4a4c0
-rtl: esyms: _ZTSN10__cxxabiv119__foreign_exceptionE ->  0x4a568
-rtl: esyms: _ZTSN10__cxxabiv120__si_class_type_infoE ->  0x4a5d0
-rtl: esyms: _ZTSNSt3_V214error_categoryE ->  0x4b750
-rtl: esyms: _ZTSSt11logic_error ->  0x4b628
-rtl: esyms: _ZTSSt12length_error ->  0x4b638
-rtl: esyms: _ZTSSt13bad_exception ->  0x4a58c
-rtl: esyms: _ZTSSt13runtime_error ->  0x4b64c
-rtl: esyms: _ZTSSt9bad_alloc ->  0x4a490
-rtl: esyms: _ZTSSt9exception ->  0x4a5a0
-rtl: esyms: _ZTSSt9type_info ->  0x4a62c
-rtl: esyms: _ZTVN10__cxxabiv117__class_type_infoE ->  0x4a4e4
-rtl: esyms: _ZTVN10__cxxabiv120__si_class_type_infoE ->  0x4a5f8
-rtl: esyms: _ZTVSt11logic_error ->  0x4b660
-rtl: esyms: _ZTVSt12length_error ->  0x4b674
-rtl: esyms: _ZTVSt13bad_exception ->  0x4a5b0
-rtl: esyms: _ZTVSt13runtime_error ->  0x4b688
-rtl: esyms: _ZTVSt9bad_alloc ->  0x4a4a0
-rtl: esyms: _ZdlPv ->    0xf09
-rtl: esyms: _ZdlPvj ->    0xf0d
-rtl: esyms: _Znwj ->   0x1de1
+rtl: esyms: _ZN9__gnu_cxx27__verbose_terminate_handlerEv ->   0x2145
+rtl: esyms: _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj ->   0x1055
+rtl: esyms: _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE ->   0x103d
+rtl: esyms: _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv ->    0xfc9
+rtl: esyms: _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE ->   0x1081
+rtl: esyms: _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_ ->   0x1001
+rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE ->   0x20e5
+rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE ->   0x2045
+rtl: esyms: _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_ ->   0x2009
+rtl: esyms: _ZNKSt11logic_error4whatEv ->   0x8ac9
+rtl: esyms: _ZNKSt13bad_exception4whatEv ->   0x1675
+rtl: esyms: _ZNKSt13runtime_error4whatEv ->   0x8acd
+rtl: esyms: _ZNKSt3_V214error_category10_M_messageB5cxx11Ei ->   0x8d09
+rtl: esyms: _ZNKSt3_V214error_category10equivalentERKSt10error_codei ->   0x8cd1
+rtl: esyms: _ZNKSt3_V214error_category10equivalentEiRKSt15error_condition ->   0x8dd5
+rtl: esyms: _ZNKSt3_V214error_category23default_error_conditionEi ->   0x8cc9
+rtl: esyms: _ZNKSt9bad_alloc4whatEv ->    0xf8d
+rtl: esyms: _ZNKSt9type_info14__is_pointer_pEv ->   0x2115
+rtl: esyms: _ZNKSt9type_info15__is_function_pEv ->   0x2115
+rtl: esyms: _ZNKSt9type_infoeqERKS_ ->   0x2119
+rtl: esyms: _ZNSt11logic_errorC1EPKc ->   0x8bd1
+rtl: esyms: _ZNSt11logic_errorC2EPKc ->   0x8bd1
+rtl: esyms: _ZNSt11logic_errorD0Ev ->   0x8b25
+rtl: esyms: _ZNSt11logic_errorD1Ev ->   0x8ad1
+rtl: esyms: _ZNSt11logic_errorD2Ev ->   0x8ad1
+rtl: esyms: _ZNSt12__cow_stringC1EPKcj ->   0x8c35
+rtl: esyms: _ZNSt12__cow_stringC2EPKcj ->   0x8c35
+rtl: esyms: _ZNSt12length_errorC1EPKc ->   0x8bf9
+rtl: esyms: _ZNSt12length_errorC2EPKc ->   0x8bf9
+rtl: esyms: _ZNSt12length_errorD0Ev ->   0x8b4d
+rtl: esyms: _ZNSt12length_errorD1Ev ->   0x8b39
+rtl: esyms: _ZNSt12length_errorD2Ev ->   0x8b39
+rtl: esyms: _ZNSt13bad_exceptionD0Ev ->   0x1681
+rtl: esyms: _ZNSt13bad_exceptionD1Ev ->   0x1671
+rtl: esyms: _ZNSt13bad_exceptionD2Ev ->   0x1671
+rtl: esyms: _ZNSt13runtime_errorC1EPKc ->   0x8c0d
+rtl: esyms: _ZNSt13runtime_errorC2EPKc ->   0x8c0d
+rtl: esyms: _ZNSt13runtime_errorD0Ev ->   0x8bbd
+rtl: esyms: _ZNSt13runtime_errorD1Ev ->   0x8b69
+rtl: esyms: _ZNSt13runtime_errorD2Ev ->   0x8b69
+rtl: esyms: _ZNSt9bad_allocD0Ev ->    0xfad
+rtl: esyms: _ZNSt9bad_allocD1Ev ->    0xf99
+rtl: esyms: _ZNSt9bad_allocD2Ev ->    0xf99
+rtl: esyms: _ZNSt9exceptionD1Ev ->   0x166d
+rtl: esyms: _ZNSt9exceptionD2Ev ->   0x166d
+rtl: esyms: _ZNSt9type_infoD1Ev ->   0x2111
+rtl: esyms: _ZNSt9type_infoD2Ev ->   0x2111
+rtl: esyms: _ZSt10unexpectedv ->   0x1e05
+rtl: esyms: _ZSt13get_terminatev ->   0x1e19
+rtl: esyms: _ZSt14get_unexpectedv ->   0x1e29
+rtl: esyms: _ZSt15get_new_handlerv ->   0x1f89
+rtl: esyms: _ZSt19__throw_logic_errorPKc ->   0x8c49
+rtl: esyms: _ZSt20__throw_length_errorPKc ->   0x8c7d
+rtl: esyms: _ZSt9terminatev ->   0x1de9
+rtl: esyms: _ZTIN10__cxxabiv115__forced_unwindE ->  0x4ebf4
+rtl: esyms: _ZTIN10__cxxabiv117__class_type_infoE ->  0x4eb84
+rtl: esyms: _ZTIN10__cxxabiv119__foreign_exceptionE ->  0x4ebfc
+rtl: esyms: _ZTIN10__cxxabiv120__si_class_type_infoE ->  0x4ec94
+rtl: esyms: _ZTINSt3_V214error_categoryE ->  0x4fe50
+rtl: esyms: _ZTISt11logic_error ->  0x4fd64
+rtl: esyms: _ZTISt12length_error ->  0x4fd70
+rtl: esyms: _ZTISt13bad_exception ->  0x4ec04
+rtl: esyms: _ZTISt13runtime_error ->  0x4fd7c
+rtl: esyms: _ZTISt9bad_alloc ->  0x4eb54
+rtl: esyms: _ZTISt9exception ->  0x4ec10
+rtl: esyms: _ZTISt9type_info ->  0x4ecf4
+rtl: esyms: _ZTSN10__cxxabiv115__forced_unwindE ->  0x4ec18
+rtl: esyms: _ZTSN10__cxxabiv117__class_type_infoE ->  0x4eb90
+rtl: esyms: _ZTSN10__cxxabiv119__foreign_exceptionE ->  0x4ec38
+rtl: esyms: _ZTSN10__cxxabiv120__si_class_type_infoE ->  0x4eca0
+rtl: esyms: _ZTSNSt3_V214error_categoryE ->  0x4feb0
+rtl: esyms: _ZTSSt11logic_error ->  0x4fd88
+rtl: esyms: _ZTSSt12length_error ->  0x4fd98
+rtl: esyms: _ZTSSt13bad_exception ->  0x4ec5c
+rtl: esyms: _ZTSSt13runtime_error ->  0x4fdac
+rtl: esyms: _ZTSSt9bad_alloc ->  0x4eb60
+rtl: esyms: _ZTSSt9exception ->  0x4ec70
+rtl: esyms: _ZTSSt9type_info ->  0x4ecfc
+rtl: esyms: _ZTVN10__cxxabiv117__class_type_infoE ->  0x4ebb4
+rtl: esyms: _ZTVN10__cxxabiv120__si_class_type_infoE ->  0x4ecc8
+rtl: esyms: _ZTVSt11logic_error ->  0x4fdc0
+rtl: esyms: _ZTVSt12length_error ->  0x4fdd4
+rtl: esyms: _ZTVSt13bad_exception ->  0x4ec80
+rtl: esyms: _ZTVSt13runtime_error ->  0x4fde8
+rtl: esyms: _ZTVSt9bad_alloc ->  0x4eb70
+rtl: esyms: _ZdlPv ->   0x10c1
+rtl: esyms: _ZdlPvj ->   0x10c5
+rtl: esyms: _Znwj ->   0x1f99
 rtl: esyms: __TMC_END__ ->      0x0
-rtl: esyms: ___Unwind_Backtrace ->   0x9fc1
-rtl: esyms: ___Unwind_ForcedUnwind ->   0x9f9d
-rtl: esyms: ___Unwind_RaiseException ->   0x9f31
-rtl: esyms: ___Unwind_Resume ->   0x9f55
-rtl: esyms: ___Unwind_Resume_or_Rethrow ->   0x9f79
-rtl: esyms: __aeabi_atexit ->    0xdc9
-rtl: esyms: __aeabi_idiv ->   0x8f31
-rtl: esyms: __aeabi_idivmod ->   0x91c5
-rtl: esyms: __aeabi_ldivmod ->   0x91e5
-rtl: esyms: __aeabi_uidiv ->   0x8cb9
-rtl: esyms: __aeabi_uidivmod ->   0x8f15
-rtl: esyms: __aeabi_uldivmod ->   0x9285
-rtl: esyms: __aeabi_unwind_cpp_pr0 ->   0x9ba1
-rtl: esyms: __any_on ->  0x35131
-rtl: esyms: __ascii_wctomb ->  0x3b431
-rtl: esyms: __assert ->  0x323b1
-rtl: esyms: __assert_func ->   0xebcf
-rtl: esyms: __atexit_lock -> 0x102d5c
-rtl: esyms: __b2d ->  0x34ee9
-rtl: esyms: __call_exitprocs ->  0x32281
-rtl: esyms: __copybits ->  0x350e9
-rtl: esyms: __ctype_ptr__ -> 0x1017b4
-rtl: esyms: __cxa_allocate_exception ->   0x1031
-rtl: esyms: __cxa_atexit ->  0x323c9
-rtl: esyms: __cxa_begin_catch ->   0x13a5
-rtl: esyms: __cxa_begin_cleanup ->   0x1185
-rtl: esyms: __cxa_call_terminate ->   0x1295
-rtl: esyms: __cxa_call_unexpected ->   0x12b5
-rtl: esyms: __cxa_current_exception_type ->   0x1db5
-rtl: esyms: __cxa_demangle ->   0x8379
-rtl: esyms: __cxa_end_catch ->   0x1429
-rtl: esyms: __cxa_end_cleanup ->   0x10b5
-rtl: esyms: __cxa_free_exception ->   0x1061
-rtl: esyms: __cxa_get_globals ->   0x152d
-rtl: esyms: __cxa_get_globals_fast ->   0x1511
-rtl: esyms: __cxa_rethrow ->   0x1d45
-rtl: esyms: __cxa_throw ->   0x1cc5
-rtl: esyms: __cxa_type_match ->   0x10c1
-rtl: esyms: __d2b ->  0x34fad
-rtl: esyms: __divsi3 ->   0x8f31
+rtl: esyms: ___Unwind_Backtrace ->   0xa629
+rtl: esyms: ___Unwind_ForcedUnwind ->   0xa605
+rtl: esyms: ___Unwind_RaiseException ->   0xa599
+rtl: esyms: ___Unwind_Resume ->   0xa5bd
+rtl: esyms: ___Unwind_Resume_or_Rethrow ->   0xa5e1
+rtl: esyms: __aeabi_atexit ->    0xf81
+rtl: esyms: __aeabi_idiv ->   0x9599
+rtl: esyms: __aeabi_idivmod ->   0x982d
+rtl: esyms: __aeabi_ldivmod ->   0x984d
+rtl: esyms: __aeabi_uidiv ->   0x9321
+rtl: esyms: __aeabi_uidivmod ->   0x957d
+rtl: esyms: __aeabi_uldivmod ->   0x98ed
+rtl: esyms: __aeabi_unwind_cpp_pr0 ->   0xa209
+rtl: esyms: __any_on ->  0x36d31
+rtl: esyms: __ascii_mbtowc ->  0x35d15
+rtl: esyms: __ascii_wctomb ->  0x3d0bd
+rtl: esyms: __assert ->  0x33f39
+rtl: esyms: __assert_func ->   0xf2d7
+rtl: esyms: __atexit_lock -> 0x102e3c
+rtl: esyms: __b2d ->  0x36ae9
+rtl: esyms: __call_exitprocs ->  0x33e09
+rtl: esyms: __copybits ->  0x36ce9
+rtl: esyms: __cxa_allocate_exception ->   0x11e9
+rtl: esyms: __cxa_atexit ->  0x33f51
+rtl: esyms: __cxa_begin_catch ->   0x155d
+rtl: esyms: __cxa_begin_cleanup ->   0x133d
+rtl: esyms: __cxa_call_terminate ->   0x144d
+rtl: esyms: __cxa_call_unexpected ->   0x146d
+rtl: esyms: __cxa_current_exception_type ->   0x1f6d
+rtl: esyms: __cxa_demangle ->   0x89dd
+rtl: esyms: __cxa_end_catch ->   0x15e1
+rtl: esyms: __cxa_end_cleanup ->   0x126d
+rtl: esyms: __cxa_free_exception ->   0x1219
+rtl: esyms: __cxa_get_globals ->   0x16e5
+rtl: esyms: __cxa_get_globals_fast ->   0x16c9
+rtl: esyms: __cxa_rethrow ->   0x1efd
+rtl: esyms: __cxa_throw ->   0x1e7d
+rtl: esyms: __cxa_type_match ->   0x1279
+rtl: esyms: __d2b ->  0x36bad
+rtl: esyms: __divsi3 ->   0x9599
 rtl: esyms: __dso_handle -> 0x101400
-rtl: esyms: __errno ->  0x331fd
-rtl: esyms: __exidx_end ->  0x533c0
-rtl: esyms: __exidx_start ->  0x53140
-rtl: esyms: __fp_lock_all ->  0x33739
-rtl: esyms: __fp_unlock_all ->  0x33759
-rtl: esyms: __fputwc ->  0x3394d
-rtl: esyms: __gcclibcxx_demangle_callback ->   0x8445
-rtl: esyms: __getreent ->    0xc13
-rtl: esyms: __gnu_Unwind_Backtrace ->   0x9811
-rtl: esyms: __gnu_Unwind_ForcedUnwind ->   0x96e9
-rtl: esyms: __gnu_Unwind_RaiseException ->   0x9689
-rtl: esyms: __gnu_Unwind_Restore_VFP ->   0x9e51
-rtl: esyms: __gnu_Unwind_Restore_VFP_D ->   0x9e61
-rtl: esyms: __gnu_Unwind_Restore_VFP_D_16_to_31 ->   0x9e71
-rtl: esyms: __gnu_Unwind_Restore_WMMXC ->   0x9f09
-rtl: esyms: __gnu_Unwind_Restore_WMMXD ->   0x9e81
-rtl: esyms: __gnu_Unwind_Resume ->   0x96fd
-rtl: esyms: __gnu_Unwind_Resume_or_Rethrow ->   0x9741
-rtl: esyms: __gnu_Unwind_Save_VFP ->   0x9e59
-rtl: esyms: __gnu_Unwind_Save_VFP_D ->   0x9e69
-rtl: esyms: __gnu_Unwind_Save_VFP_D_16_to_31 ->   0x9e79
-rtl: esyms: __gnu_Unwind_Save_WMMXC ->   0x9f1d
-rtl: esyms: __gnu_Unwind_Save_WMMXD ->   0x9ec5
-rtl: esyms: __gnu_end_cleanup ->   0x11e9
-rtl: esyms: __gnu_unwind_execute ->   0xa041
-rtl: esyms: __gnu_unwind_frame ->   0xa311
-rtl: esyms: __gxx_personality_v0 ->   0x1745
-rtl: esyms: __hi0bits ->  0x34a1d
-rtl: esyms: __i2b ->  0x34ab9
-rtl: esyms: __libc_fini_array ->  0x33779
-rtl: esyms: __libc_init_array ->  0x33f05
-rtl: esyms: __lo0bits ->  0x34a5d
-rtl: esyms: __locale_charset ->  0x33fb5
-rtl: esyms: __locale_cjk_lang ->  0x33fd5
-rtl: esyms: __locale_mb_cur_max ->  0x33fc1
-rtl: esyms: __locale_msgcharset ->  0x33fcd
-rtl: esyms: __lshift ->  0x34ca1
-rtl: esyms: __mb_cur_max -> 0x101ab8
-rtl: esyms: __mcmp ->  0x34d45
-rtl: esyms: __mdiff ->  0x34d7d
-rtl: esyms: __mprec_bigtens ->  0x52758
-rtl: esyms: __mprec_tens ->  0x52668
-rtl: esyms: __mprec_tinytens ->  0x52730
-rtl: esyms: __multadd ->  0x348f9
-rtl: esyms: __multiply ->  0x34acd
-rtl: esyms: __pow5mult ->  0x34bfd
-rtl: esyms: __ratio ->  0x35069
-rtl: esyms: __register_exitproc ->  0x321b1
-rtl: esyms: __restore_core_regs ->   0x9e39
-rtl: esyms: __s2b ->  0x34981
-rtl: esyms: __sclose ->  0x35571
-rtl: esyms: __seofread ->  0x354f9
-rtl: esyms: __sflush_r ->  0x332fd
-rtl: esyms: __sfmoreglue ->  0x33595
-rtl: esyms: __sfp ->  0x33649
-rtl: esyms: __sfp_lock_acquire ->  0x33709
-rtl: esyms: __sfp_lock_release ->  0x33715
-rtl: esyms: __sfvwrite_r ->  0x33a7d
-rtl: esyms: __sinit ->  0x335d9
-rtl: esyms: __sinit_lock_acquire ->  0x33721
-rtl: esyms: __sinit_lock_release ->  0x3372d
-rtl: esyms: __smakebuf_r ->  0x34079
-rtl: esyms: __sprint_r ->  0x38989
-rtl: esyms: __sread ->  0x354cd
-rtl: esyms: __sseek ->  0x35541
-rtl: esyms: __ssprint_r ->  0x36281
-rtl: esyms: __start_set_sysctl_set ->  0x533ec
-rtl: esyms: __stop_set_sysctl_set ->  0x533ec
-rtl: esyms: __swbuf ->  0x3b365
-rtl: esyms: __swbuf_r ->  0x3b2b9
-rtl: esyms: __swhatbuf_r ->  0x34009
-rtl: esyms: __swrite ->  0x354fd
-rtl: esyms: __swsetup_r ->  0x3b479
-rtl: esyms: __udivmoddi4 ->   0x92b9
-rtl: esyms: __udivsi3 ->   0x8cb9
-rtl: esyms: __ulp ->  0x34e95
-rtl: esyms: __wctomb -> 0x101b14
-rtl: esyms: _calloc_r ->   0xee6f
-rtl: esyms: _cleanup ->  0x335c1
-rtl: esyms: _cleanup_r ->  0x334ed
-rtl: esyms: _close_r ->   0xf2a5
-rtl: esyms: _ctype_ ->  0x52530
-rtl: esyms: _dtoa_r ->  0x32519
-rtl: esyms: _exit ->  0x10665
-rtl: esyms: _fclose_r ->  0x33225
-rtl: esyms: _fflush_r ->  0x33469
-rtl: esyms: _fini ->  0x3b545
-rtl: esyms: _fiprintf_r ->  0x337ad
-rtl: esyms: _fputc_r ->  0x337f5
-rtl: esyms: _fputs_r ->  0x338a9
-rtl: esyms: _fputwc_r ->  0x339ed
-rtl: esyms: _free_r ->   0xee8d
-rtl: esyms: _fstat_r ->   0xf447
-rtl: esyms: _fwalk ->  0x33d99
-rtl: esyms: _fwalk_reent ->  0x33de1
-rtl: esyms: _fwrite_r ->  0x33e31
-rtl: esyms: _getpid_r ->   0xf55f
-rtl: esyms: _gettimeofday_r ->   0xec87
-rtl: esyms: _global_atexit -> 0x102d58
-rtl: esyms: _global_impure_ptr ->  0x52648
-rtl: esyms: _impure_ptr -> 0x1017b8
-rtl: esyms: _init ->  0x3b539
-rtl: esyms: _isatty ->  0x32365
-rtl: esyms: _isatty_r ->   0xf575
-rtl: esyms: _kill_r ->  0x1dce9
-rtl: esyms: _localeconv_r ->  0x33fd9
-rtl: esyms: _lseek_r ->   0xf817
-rtl: esyms: _malloc_r ->   0xeea5
-rtl: esyms: _mprec_log10 ->  0x350c1
-rtl: esyms: _printf_r ->  0x35191
-rtl: esyms: _putc_r ->  0x351d9
-rtl: esyms: _puts_r ->  0x352c5
-rtl: esyms: _raise_r ->  0x3539d
-rtl: esyms: _read_r ->  0x10d5b
-rtl: esyms: _realloc_r ->   0xeebf
-rtl: esyms: _reclaim_reent ->  0x353d1
-rtl: esyms: _rtems_octal2ulong ->  0x31a9b
-rtl: esyms: _rtems_tar_header_checksum ->  0x3215f
-rtl: esyms: _rtld_debug -> 0x103508
-rtl: esyms: _rtld_debug_state ->  0x15b8d
-rtl: esyms: _rtld_linkmap_add ->  0x15b9b
-rtl: esyms: _rtld_linkmap_delete ->  0x15c73
-rtl: esyms: _setlocale_r ->  0x33f61
-rtl: esyms: _sprintf_r ->  0x35441
+rtl: esyms: __errno ->  0x34d85
+rtl: esyms: __exidx_end ->  0x583ec
+rtl: esyms: __exidx_start ->  0x58164
+rtl: esyms: __fp_lock_all ->  0x352c1
+rtl: esyms: __fp_unlock_all ->  0x352e1
+rtl: esyms: __fputwc ->  0x354d5
+rtl: esyms: __gcclibcxx_demangle_callback ->   0x8aa9
+rtl: esyms: __getreent ->    0xc69
+rtl: esyms: __global_locale -> 0x101a80
+rtl: esyms: __gnu_Unwind_Backtrace ->   0x9e79
+rtl: esyms: __gnu_Unwind_Find_exidx ->  0x18707
+rtl: esyms: __gnu_Unwind_ForcedUnwind ->   0x9d51
+rtl: esyms: __gnu_Unwind_RaiseException ->   0x9cf1
+rtl: esyms: __gnu_Unwind_Restore_VFP ->   0xa4b9
+rtl: esyms: __gnu_Unwind_Restore_VFP_D ->   0xa4c9
+rtl: esyms: __gnu_Unwind_Restore_VFP_D_16_to_31 ->   0xa4d9
+rtl: esyms: __gnu_Unwind_Restore_WMMXC ->   0xa571
+rtl: esyms: __gnu_Unwind_Restore_WMMXD ->   0xa4e9
+rtl: esyms: __gnu_Unwind_Resume ->   0x9d65
+rtl: esyms: __gnu_Unwind_Resume_or_Rethrow ->   0x9da9
+rtl: esyms: __gnu_Unwind_Save_VFP ->   0xa4c1
+rtl: esyms: __gnu_Unwind_Save_VFP_D ->   0xa4d1
+rtl: esyms: __gnu_Unwind_Save_VFP_D_16_to_31 ->   0xa4e1
+rtl: esyms: __gnu_Unwind_Save_WMMXC ->   0xa585
+rtl: esyms: __gnu_Unwind_Save_WMMXD ->   0xa52d
+rtl: esyms: __gnu_end_cleanup ->   0x13a1
+rtl: esyms: __gnu_unwind_execute ->   0xa6a9
+rtl: esyms: __gnu_unwind_frame ->   0xa979
+rtl: esyms: __gxx_personality_v0 ->   0x18fd
+rtl: esyms: __hi0bits ->  0x3661d
+rtl: esyms: __i2b ->  0x366b9
+rtl: esyms: __libc_fini_array ->  0x35301
+rtl: esyms: __libc_init_array ->  0x35a8d
+rtl: esyms: __lo0bits ->  0x3665d
+rtl: esyms: __locale_ctype_ptr ->  0x35b79
+rtl: esyms: __locale_ctype_ptr_l ->  0x35b71
+rtl: esyms: __locale_mb_cur_max ->  0x35b55
+rtl: esyms: __localeconv_l ->  0x35ba1
+rtl: esyms: __lshift ->  0x368a1
+rtl: esyms: __mcmp ->  0x36945
+rtl: esyms: __mdiff ->  0x3697d
+rtl: esyms: __mprec_bigtens ->  0x57748
+rtl: esyms: __mprec_tens ->  0x57658
+rtl: esyms: __mprec_tinytens ->  0x57720
+rtl: esyms: __multadd ->  0x364f9
+rtl: esyms: __multiply ->  0x366cd
+rtl: esyms: __pow5mult ->  0x367fd
+rtl: esyms: __ratio ->  0x36c69
+rtl: esyms: __register_exitproc ->  0x33d39
+rtl: esyms: __restore_core_regs ->   0xa4a1
+rtl: esyms: __s2b ->  0x36581
+rtl: esyms: __sclose ->  0x37171
+rtl: esyms: __seofread ->  0x370f9
+rtl: esyms: __sflush_r ->  0x34e85
+rtl: esyms: __sfmoreglue ->  0x3511d
+rtl: esyms: __sfp ->  0x351d1
+rtl: esyms: __sfp_lock_acquire ->  0x35291
+rtl: esyms: __sfp_lock_release ->  0x3529d
+rtl: esyms: __sfvwrite_r ->  0x35605
+rtl: esyms: __sinit ->  0x35161
+rtl: esyms: __sinit_lock_acquire ->  0x352a9
+rtl: esyms: __sinit_lock_release ->  0x352b5
+rtl: esyms: __smakebuf_r ->  0x35c4d
+rtl: esyms: __sprint_r ->  0x3a5e1
+rtl: esyms: __sread ->  0x370cd
+rtl: esyms: __sseek ->  0x37141
+rtl: esyms: __ssprint_r ->  0x37edd
+rtl: esyms: __start_set_sysctl_set ->  0x58418
+rtl: esyms: __stop_set_sysctl_set ->  0x58418
+rtl: esyms: __swbuf ->  0x3cfbd
+rtl: esyms: __swbuf_r ->  0x3cf11
+rtl: esyms: __swhatbuf_r ->  0x35bdd
+rtl: esyms: __swrite ->  0x370fd
+rtl: esyms: __swsetup_r ->  0x3d0d5
+rtl: esyms: __udivmoddi4 ->   0x9921
+rtl: esyms: __udivsi3 ->   0x9321
+rtl: esyms: __ulp ->  0x36a95
+rtl: esyms: _calloc_r ->   0xf577
+rtl: esyms: _cleanup ->  0x35149
+rtl: esyms: _cleanup_r ->  0x35075
+rtl: esyms: _close_r ->   0xf9ad
+rtl: esyms: _ctype_ ->  0x57520
+rtl: esyms: _dtoa_r ->  0x340a1
+rtl: esyms: _exit ->  0x10d6d
+rtl: esyms: _fclose_r ->  0x34dad
+rtl: esyms: _fflush_r ->  0x34ff1
+rtl: esyms: _fini ->  0x3d1a1
+rtl: esyms: _fiprintf_r ->  0x35335
+rtl: esyms: _fputc_r ->  0x3537d
+rtl: esyms: _fputs_r ->  0x35431
+rtl: esyms: _fputwc_r ->  0x35575
+rtl: esyms: _free_r ->   0xf595
+rtl: esyms: _fstat_r ->   0xfb4f
+rtl: esyms: _fwalk ->  0x35921
+rtl: esyms: _fwalk_reent ->  0x35969
+rtl: esyms: _fwrite_r ->  0x359b9
+rtl: esyms: _getpid_r ->   0xfc67
+rtl: esyms: _gettimeofday_r ->   0xf38f
+rtl: esyms: _global_atexit -> 0x102e38
+rtl: esyms: _global_impure_ptr ->  0x57638
+rtl: esyms: _impure_ptr -> 0x1017a0
+rtl: esyms: _init ->  0x3d195
+rtl: esyms: _isatty ->  0x33eed
+rtl: esyms: _isatty_r ->   0xfc7d
+rtl: esyms: _kill_r ->  0x1e9ad
+rtl: esyms: _localeconv_r ->  0x35ba5
+rtl: esyms: _lseek_r ->   0xff1f
+rtl: esyms: _malloc_r ->   0xf5ad
+rtl: esyms: _mbtowc_r ->  0x35cdd
+rtl: esyms: _mprec_log10 ->  0x36cc1
+rtl: esyms: _printf_r ->  0x36d91
+rtl: esyms: _putc_r ->  0x36dd9
+rtl: esyms: _puts_r ->  0x36ec5
+rtl: esyms: _raise_r ->  0x36f9d
+rtl: esyms: _read_r ->  0x11453
+rtl: esyms: _realloc_r ->   0xf5c7
+rtl: esyms: _reclaim_reent ->  0x36fd1
+rtl: esyms: _rtems_octal2ulong ->  0x3361b
+rtl: esyms: _rtems_tar_header_checksum ->  0x33ce7
+rtl: esyms: _rtld_debug -> 0x1035ec
+rtl: esyms: _rtld_debug_state ->  0x16331
+rtl: esyms: _rtld_linkmap_add ->  0x1633f
+rtl: esyms: _rtld_linkmap_delete ->  0x1641b
+rtl: esyms: _setlocale_r ->  0x35b01
+rtl: esyms: _sprintf_r ->  0x37041
 rtl: esyms: _start ->     0x40
-rtl: esyms: _strdup_r ->  0x35a15
-rtl: esyms: _strerror_r ->  0x35a3d
-rtl: esyms: _strtoul_r ->  0x3610d
-rtl: esyms: _svfiprintf_r ->  0x36379
-rtl: esyms: _svfprintf_r ->  0x36ee1
-rtl: esyms: _user_strerror ->  0x38905
-rtl: esyms: _vfiprintf_r ->  0x3899d
-rtl: esyms: _vfprintf_r ->  0x39789
-rtl: esyms: _vsnprintf_r ->  0x3b22d
-rtl: esyms: _wcrtomb_r ->  0x3b37d
-rtl: esyms: _wctomb_r ->  0x3b449
-rtl: esyms: _write_r ->  0x15073
-rtl: esyms: abort ->  0x323a1
-rtl: esyms: arm_cp15_set_exception_handler ->   0xa8b5
-rtl: esyms: arm_cpu_mode -> 0x1017b0
-rtl: esyms: atexit ->  0x323bd
-rtl: esyms: boot_card ->   0xabf5
-rtl: esyms: bsp_boot_cmdline -> 0x102f24
-rtl: esyms: bsp_console_select ->   0xb525
-rtl: esyms: bsp_fatal_extension ->   0xac1b
-rtl: esyms: bsp_interrupt_dispatch ->   0xaa87
-rtl: esyms: bsp_interrupt_facility_initialize ->   0xab43
-rtl: esyms: bsp_interrupt_handler_default ->   0xb55b
-rtl: esyms: bsp_interrupt_handler_table -> 0x102f28
-rtl: esyms: bsp_interrupt_initialize ->   0xb811
-rtl: esyms: bsp_interrupt_lock ->   0xb7d5
-rtl: esyms: bsp_interrupt_unlock ->   0xb7f3
-rtl: esyms: bsp_interrupt_vector_enable ->   0xaad3
-rtl: esyms: bsp_predriver_hook ->   0xaca5
+rtl: esyms: _strdup_r ->  0x37615
+rtl: esyms: _strerror_r ->  0x3763d
+rtl: esyms: _strtoul_r ->  0x37e49
+rtl: esyms: _svfiprintf_r ->  0x37fd5
+rtl: esyms: _svfprintf_r ->  0x38b39
+rtl: esyms: _user_strerror ->  0x3a55d
+rtl: esyms: _vfiprintf_r ->  0x3a5f5
+rtl: esyms: _vfprintf_r ->  0x3b3e1
+rtl: esyms: _vsnprintf_r ->  0x3ce85
+rtl: esyms: _wcrtomb_r ->  0x3cfd5
+rtl: esyms: _wctomb_r ->  0x3d089
+rtl: esyms: _write_r ->  0x157c5
+rtl: esyms: abort ->  0x33f29
+rtl: esyms: arm_cp15_set_exception_handler ->   0xaf51
+rtl: esyms: arm_cpu_mode -> 0x101798
+rtl: esyms: atexit ->  0x33f45
+rtl: esyms: boot_card ->   0xb291
+rtl: esyms: bsp_boot_cmdline -> 0x103004
+rtl: esyms: bsp_console_select ->   0xbbef
+rtl: esyms: bsp_fatal_extension ->   0xb2b7
+rtl: esyms: bsp_interrupt_dispatch ->   0xb123
+rtl: esyms: bsp_interrupt_facility_initialize ->   0xb1df
+rtl: esyms: bsp_interrupt_handler_default ->   0xbc25
+rtl: esyms: bsp_interrupt_handler_table -> 0x103008
+rtl: esyms: bsp_interrupt_initialize ->   0xbedb
+rtl: esyms: bsp_interrupt_lock ->   0xbe9f
+rtl: esyms: bsp_interrupt_unlock ->   0xbebd
+rtl: esyms: bsp_interrupt_vector_enable ->   0xb16f
+rtl: esyms: bsp_predriver_hook ->   0xb341
 rtl: esyms: bsp_processor_count ->      0x1
-rtl: esyms: bsp_reset ->   0xacb3
-rtl: esyms: bsp_section_bss_begin -> 0x101b20
-rtl: esyms: bsp_section_bss_end -> 0x103a30
-rtl: esyms: bsp_section_bss_size ->   0x1f10
+rtl: esyms: bsp_reset ->   0xb34f
+rtl: esyms: bsp_section_bss_begin -> 0x101c00
+rtl: esyms: bsp_section_bss_end -> 0x103b30
+rtl: esyms: bsp_section_bss_size ->   0x1f30
 rtl: esyms: bsp_section_data_begin -> 0x101400
-rtl: esyms: bsp_section_data_end -> 0x101b18
+rtl: esyms: bsp_section_data_end -> 0x101bec
 rtl: esyms: bsp_section_data_load_begin -> 0x101400
-rtl: esyms: bsp_section_data_load_end -> 0x101b18
-rtl: esyms: bsp_section_data_size ->    0x718
+rtl: esyms: bsp_section_data_load_end -> 0x101bec
+rtl: esyms: bsp_section_data_size ->    0x7ec
 rtl: esyms: bsp_section_fast_data_begin -> 0x101400
 rtl: esyms: bsp_section_fast_data_end -> 0x101400
 rtl: esyms: bsp_section_fast_data_load_begin -> 0x101400
@@ -634,29 +634,29 @@ rtl: esyms: bsp_section_nocachenoload_begin -> 0xfefc000
 rtl: esyms: bsp_section_nocachenoload_end -> 0xfffc000
 rtl: esyms: bsp_section_nocachenoload_size -> 0x100000
 rtl: esyms: bsp_section_robarrier_align ->      0x1
-rtl: esyms: bsp_section_rodata_begin ->  0x3b550
-rtl: esyms: bsp_section_rodata_end ->  0x53428
-rtl: esyms: bsp_section_rodata_load_begin ->  0x3b550
-rtl: esyms: bsp_section_rodata_load_end ->  0x53428
-rtl: esyms: bsp_section_rodata_size ->  0x17ed8
+rtl: esyms: bsp_section_rodata_begin ->  0x3d1b0
+rtl: esyms: bsp_section_rodata_end ->  0x58454
+rtl: esyms: bsp_section_rodata_load_begin ->  0x3d1b0
+rtl: esyms: bsp_section_rodata_load_end ->  0x58454
+rtl: esyms: bsp_section_rodata_size ->  0x1b2a4
 rtl: esyms: bsp_section_rwbarrier_align -> 0x100000
 rtl: esyms: bsp_section_stack_begin -> 0xfefc000
 rtl: esyms: bsp_section_stack_end -> 0xfefc000
 rtl: esyms: bsp_section_stack_size ->      0x0
 rtl: esyms: bsp_section_start_begin ->      0x0
-rtl: esyms: bsp_section_start_end ->    0xa70
-rtl: esyms: bsp_section_start_size ->    0xa70
-rtl: esyms: bsp_section_text_begin ->    0xa80
-rtl: esyms: bsp_section_text_end ->  0x3b550
-rtl: esyms: bsp_section_text_load_begin ->    0xa80
-rtl: esyms: bsp_section_text_load_end ->  0x3b550
-rtl: esyms: bsp_section_text_size ->  0x3aad0
+rtl: esyms: bsp_section_start_end ->    0xaa4
+rtl: esyms: bsp_section_start_size ->    0xaa4
+rtl: esyms: bsp_section_text_begin ->    0xac0
+rtl: esyms: bsp_section_text_end ->  0x3d1ac
+rtl: esyms: bsp_section_text_load_begin ->    0xac0
+rtl: esyms: bsp_section_text_load_end ->  0x3d1ac
+rtl: esyms: bsp_section_text_size ->  0x3c6ec
 rtl: esyms: bsp_section_vector_begin -> 0x100000
 rtl: esyms: bsp_section_vector_end -> 0x101400
 rtl: esyms: bsp_section_vector_size ->   0x1400
-rtl: esyms: bsp_section_work_begin -> 0x103a30
+rtl: esyms: bsp_section_work_begin -> 0x103b30
 rtl: esyms: bsp_section_work_end -> 0xfefc000
-rtl: esyms: bsp_section_work_size -> 0xfdf85d0
+rtl: esyms: bsp_section_work_size -> 0xfdf84d0
 rtl: esyms: bsp_section_xbarrier_align ->      0x1
 rtl: esyms: bsp_stack_abt_begin -> 0x101000
 rtl: esyms: bsp_stack_abt_end -> 0x101400
@@ -683,9 +683,10 @@ rtl: esyms: bsp_stack_svc_size ->      0x0
 rtl: esyms: bsp_stack_und_begin -> 0x101000
 rtl: esyms: bsp_stack_und_end -> 0x101000
 rtl: esyms: bsp_stack_und_size ->      0x0
-rtl: esyms: bsp_start ->   0xacef
-rtl: esyms: bsp_start_hook_0 ->    0x735
-rtl: esyms: bsp_start_hook_1 ->    0x791
+rtl: esyms: bsp_start ->   0xb3a9
+rtl: esyms: bsp_start_hook_0 ->    0x769
+rtl: esyms: bsp_start_hook_0_done ->     0xc8
+rtl: esyms: bsp_start_hook_1 ->    0x7c5
 rtl: esyms: bsp_start_memcpy ->    0x129
 rtl: esyms: bsp_start_memcpy_arm ->    0x12c
 rtl: esyms: bsp_start_vector_table_begin ->      0x0
@@ -697,585 +698,771 @@ rtl: esyms: bsp_vector_table_begin ->      0x0
 rtl: esyms: bsp_vector_table_end ->     0x40
 rtl: esyms: bsp_vector_table_in_start_section ->      0x1
 rtl: esyms: bsp_vector_table_size ->     0x40
-rtl: esyms: bsp_work_area_initialize ->   0xac6b
-rtl: esyms: calloc ->   0xeb99
-rtl: esyms: cleanup_glue ->  0x353b5
-rtl: esyms: close ->   0xf20f
-rtl: esyms: console_close ->   0xb381
-rtl: esyms: console_control ->   0xb4ed
-rtl: esyms: console_initialize ->   0xb403
-rtl: esyms: console_initialize_data ->   0xb151
-rtl: esyms: console_open ->   0xb22d
-rtl: esyms: console_read ->   0xb509
-rtl: esyms: console_write ->   0xb53f
-rtl: esyms: device_close ->   0xc321
-rtl: esyms: device_ftruncate ->   0xc3e7
-rtl: esyms: device_ioctl ->   0xc3b3
-rtl: esyms: device_open ->   0xc2e9
-rtl: esyms: device_read ->   0xc34b
-rtl: esyms: device_write ->   0xc37f
-rtl: esyms: dl_load_test ->    0xc25
-rtl: esyms: dl_tar ->  0x3b87c
-rtl: esyms: dl_tar_size ->  0x4307c
-rtl: esyms: dlclose ->  0x15129
-rtl: esyms: dlerror ->  0x15201
-rtl: esyms: dlopen ->  0x150c7
-rtl: esyms: dlsym ->  0x1519d
-rtl: esyms: exception_base ->    0xd55
-rtl: esyms: exit ->  0x33205
-rtl: esyms: fastlz_decompress ->  0x156c7
-rtl: esyms: fclose ->  0x332e9
-rtl: esyms: fflush ->  0x334c1
-rtl: esyms: fiprintf ->  0x337cd
-rtl: esyms: fputc ->  0x33851
-rtl: esyms: fputs ->  0x33935
-rtl: esyms: fputwc ->  0x33a59
-rtl: esyms: free ->   0xf2bf
-rtl: esyms: frexp ->   0x8c39
-rtl: esyms: fstat ->   0xf39d
-rtl: esyms: ftruncate ->   0xf465
-rtl: esyms: fwrite ->  0x33ee5
-rtl: esyms: getegid ->   0xf52f
-rtl: esyms: geteuid ->   0xf53f
-rtl: esyms: getpid ->   0xf54f
-rtl: esyms: gettimeofday ->   0xec57
-rtl: esyms: imfs_memfile_bytes_per_block -> 0x102910
+rtl: esyms: bsp_work_area_initialize ->   0xb307
+rtl: esyms: calloc ->   0xf2a1
+rtl: esyms: cleanup_glue ->  0x36fb5
+rtl: esyms: close ->   0xf917
+rtl: esyms: console_close ->   0xba4b
+rtl: esyms: console_control ->   0xbbb7
+rtl: esyms: console_initialize ->   0xbacd
+rtl: esyms: console_initialize_data ->   0xb81b
+rtl: esyms: console_open ->   0xb8f7
+rtl: esyms: console_read ->   0xbbd3
+rtl: esyms: console_write ->   0xbc09
+rtl: esyms: device_close ->   0xca29
+rtl: esyms: device_ftruncate ->   0xcaef
+rtl: esyms: device_ioctl ->   0xcabb
+rtl: esyms: device_open ->   0xc9f1
+rtl: esyms: device_read ->   0xca53
+rtl: esyms: device_write ->   0xca87
+rtl: esyms: dl_load_test ->    0xc7b
+rtl: esyms: dl_tar ->  0x3d53c
+rtl: esyms: dl_tar_size ->  0x4753c
+rtl: esyms: dlclose ->  0x1587b
+rtl: esyms: dlerror ->  0x15953
+rtl: esyms: dlopen ->  0x15819
+rtl: esyms: dlsym ->  0x158ef
+rtl: esyms: exception_base ->    0xe0d
+rtl: esyms: exit ->  0x34d8d
+rtl: esyms: fastlz_decompress ->  0x15e19
+rtl: esyms: fclose ->  0x34e71
+rtl: esyms: fflush ->  0x35049
+rtl: esyms: fiprintf ->  0x35355
+rtl: esyms: fputc ->  0x353d9
+rtl: esyms: fputs ->  0x354bd
+rtl: esyms: fputwc ->  0x355e1
+rtl: esyms: free ->   0xf9c7
+rtl: esyms: frexp ->   0x92a1
+rtl: esyms: fstat ->   0xfaa5
+rtl: esyms: ftruncate ->   0xfb6d
+rtl: esyms: fwrite ->  0x35a6d
+rtl: esyms: getegid ->   0xfc37
+rtl: esyms: geteuid ->   0xfc47
+rtl: esyms: getpid ->   0xfc57
+rtl: esyms: gettimeofday ->   0xf35f
+rtl: esyms: imfs_memfile_bytes_per_block -> 0x1035d8
 rtl: esyms: imfs_rq_memfile_bytes_per_block -> 0x101404
-rtl: esyms: isatty ->  0x33f5d
-rtl: esyms: libchip_serial_default_probe ->   0xbdcb
-rtl: esyms: localeconv ->  0x33ff9
-rtl: esyms: lseek ->   0xf781
-rtl: esyms: malloc ->   0xf841
-rtl: esyms: memchr ->  0x34111
-rtl: esyms: memcmp ->  0x341b1
-rtl: esyms: memcpy ->  0x34240
-rtl: esyms: memfile_blocks_allocated -> 0x102914
-rtl: esyms: memmove ->  0x34721
-rtl: esyms: memset ->  0x347f5
-rtl: esyms: mkdir ->   0xfdbd
-rtl: esyms: mknod ->   0xfea7
-rtl: esyms: mount ->  0x10583
-rtl: esyms: newlib_create_hook ->  0x10681
-rtl: esyms: newlib_terminate_hook ->  0x1075d
-rtl: esyms: open ->  0x10a9b
-rtl: esyms: printf ->  0x351b1
-rtl: esyms: printk ->  0x10bed
-rtl: esyms: pthread_getspecific ->  0x1d5f5
-rtl: esyms: pthread_key_create ->  0x1d0ed
-rtl: esyms: pthread_key_delete ->  0x1d3c1
-rtl: esyms: pthread_kill ->  0x1f7b5
-rtl: esyms: pthread_self ->  0x1f883
-rtl: esyms: pthread_setspecific ->  0x1dc71
-rtl: esyms: putc ->  0x3524d
-rtl: esyms: puts ->  0x3536d
-rtl: esyms: raise ->  0x35381
-rtl: esyms: read ->  0x10c95
-rtl: esyms: realloc ->  0x10df1
-rtl: esyms: restore_core_regs ->   0x9e39
-rtl: esyms: rmdir ->  0x10f01
-rtl: esyms: rtems_assoc_local_by_remote ->   0xeedd
-rtl: esyms: rtems_assoc_local_by_remote_bitfield ->   0xef07
-rtl: esyms: rtems_assoc_ptr_by_local ->   0xef4b
-rtl: esyms: rtems_assoc_ptr_by_remote ->   0xefab
-rtl: esyms: rtems_assoc_remote_by_local ->   0xf00b
-rtl: esyms: rtems_cache_coherent_add_area ->   0xf171
-rtl: esyms: rtems_cache_flush_multiple_data_lines ->   0xafeb
-rtl: esyms: rtems_cache_get_instruction_line_size ->   0xb01f
-rtl: esyms: rtems_cache_instruction_sync_after_code_change ->   0xb02f
-rtl: esyms: rtems_cache_invalidate_multiple_instruction_lines ->   0xb005
-rtl: esyms: rtems_chain_append ->  0x22f45
-rtl: esyms: rtems_chain_extract ->  0x22f1b
-rtl: esyms: rtems_clock_get_ticks_per_second ->  0x1f8c1
-rtl: esyms: rtems_counter_initialize_converter ->  0x22f79
-rtl: esyms: rtems_current_user_env_get ->  0x10c15
-rtl: esyms: rtems_current_user_env_key -> 0x1034f8
-rtl: esyms: rtems_deviceio_close ->  0x1117b
-rtl: esyms: rtems_deviceio_control ->  0x112ab
-rtl: esyms: rtems_deviceio_open ->  0x1113b
-rtl: esyms: rtems_deviceio_read ->  0x111b7
-rtl: esyms: rtems_deviceio_write ->  0x11231
-rtl: esyms: rtems_event_receive ->  0x1f9c1
-rtl: esyms: rtems_event_send ->  0x1ffd5
-rtl: esyms: rtems_event_system_send ->  0x222f1
-rtl: esyms: rtems_fatal ->  0x23115
-rtl: esyms: rtems_fatal_error_occurred ->  0x230fb
-rtl: esyms: rtems_filesystem_check_access ->  0x1107b
-rtl: esyms: rtems_filesystem_default_are_nodes_equal ->   0xbde1
-rtl: esyms: rtems_filesystem_default_close ->   0xbe09
-rtl: esyms: rtems_filesystem_default_eval_path ->   0xbe1f
-rtl: esyms: rtems_filesystem_default_fcntl ->   0xbe3f
-rtl: esyms: rtems_filesystem_default_freenode ->   0xbe57
-rtl: esyms: rtems_filesystem_default_fstat ->   0xbe6b
-rtl: esyms: rtems_filesystem_default_fsunmount ->   0xbe8b
-rtl: esyms: rtems_filesystem_default_fsync_or_fdatasync ->   0xbe9f
-rtl: esyms: rtems_filesystem_default_fsync_or_fdatasync_success ->   0xbebd
-rtl: esyms: rtems_filesystem_default_ftruncate ->   0xbed3
-rtl: esyms: rtems_filesystem_default_ftruncate_directory ->   0xbef5
-rtl: esyms: rtems_filesystem_default_ioctl ->   0xbf17
-rtl: esyms: rtems_filesystem_default_kqfilter ->   0xbf39
-rtl: esyms: rtems_filesystem_default_lock ->   0xbf85
-rtl: esyms: rtems_filesystem_default_lseek ->   0xbfad
-rtl: esyms: rtems_filesystem_default_lseek_directory ->   0xbfd5
-rtl: esyms: rtems_filesystem_default_lseek_file ->   0xc023
-rtl: esyms: rtems_filesystem_default_open ->   0xc145
-rtl: esyms: rtems_filesystem_default_pathconf ->  0x4c41c
-rtl: esyms: rtems_filesystem_default_poll ->   0xc161
-rtl: esyms: rtems_filesystem_default_read ->   0xc179
-rtl: esyms: rtems_filesystem_default_readv ->   0xc19b
-rtl: esyms: rtems_filesystem_default_statvfs ->   0xc215
-rtl: esyms: rtems_filesystem_default_unlock ->   0xbf99
-rtl: esyms: rtems_filesystem_default_write ->   0xc235
-rtl: esyms: rtems_filesystem_default_writev ->   0xc257
-rtl: esyms: rtems_filesystem_do_unmount ->  0x12433
-rtl: esyms: rtems_filesystem_eval_path_check_access ->  0x110ff
-rtl: esyms: rtems_filesystem_eval_path_cleanup ->  0x118ff
-rtl: esyms: rtems_filesystem_eval_path_cleanup_with_parent ->  0x11937
-rtl: esyms: rtems_filesystem_eval_path_continue ->  0x115ed
-rtl: esyms: rtems_filesystem_eval_path_eat_delimiter ->  0x124c3
-rtl: esyms: rtems_filesystem_eval_path_error ->  0x11871
-rtl: esyms: rtems_filesystem_eval_path_generic ->  0x11b3d
-rtl: esyms: rtems_filesystem_eval_path_next_token ->  0x12583
-rtl: esyms: rtems_filesystem_eval_path_recursive ->  0x117d1
-rtl: esyms: rtems_filesystem_eval_path_restart ->  0x11955
-rtl: esyms: rtems_filesystem_eval_path_start ->  0x116e5
-rtl: esyms: rtems_filesystem_eval_path_start_with_parent ->  0x11721
-rtl: esyms: rtems_filesystem_eval_path_start_with_root_and_current ->  0x11683
-rtl: esyms: rtems_filesystem_get_mount_handler ->  0x10111
-rtl: esyms: rtems_filesystem_global_location_assign ->  0x12205
+rtl: esyms: isatty ->  0x35ae5
+rtl: esyms: libchip_serial_default_probe ->   0xc4d3
+rtl: esyms: localeconv ->  0x35bc1
+rtl: esyms: lseek ->   0xfe89
+rtl: esyms: malloc ->   0xff49
+rtl: esyms: memchr ->  0x35d41
+rtl: esyms: memcmp ->  0x35de1
+rtl: esyms: memcpy ->  0x35e40
+rtl: esyms: memfile_blocks_allocated -> 0x1029f0
+rtl: esyms: memmove ->  0x36321
+rtl: esyms: memset ->  0x363f5
+rtl: esyms: mkdir ->  0x104c5
+rtl: esyms: mknod ->  0x105af
+rtl: esyms: mount ->  0x10c8b
+rtl: esyms: newlib_create_hook ->  0x10d89
+rtl: esyms: newlib_terminate_hook ->  0x10e55
+rtl: esyms: open ->  0x11193
+rtl: esyms: printf ->  0x36db1
+rtl: esyms: printk ->  0x112e5
+rtl: esyms: pthread_getspecific ->  0x1e29d
+rtl: esyms: pthread_key_create ->  0x1dd95
+rtl: esyms: pthread_key_delete ->  0x1e053
+rtl: esyms: pthread_kill ->  0x203db
+rtl: esyms: pthread_self ->  0x204bf
+rtl: esyms: pthread_setspecific ->  0x1e935
+rtl: esyms: putc ->  0x36e4d
+rtl: esyms: puts ->  0x36f6d
+rtl: esyms: raise ->  0x36f81
+rtl: esyms: read ->  0x1138d
+rtl: esyms: realloc ->  0x114e9
+rtl: esyms: restore_core_regs ->   0xa4a1
+rtl: esyms: rmdir ->  0x115f9
+rtl: esyms: rtems_assoc_local_by_remote ->   0xf5e5
+rtl: esyms: rtems_assoc_local_by_remote_bitfield ->   0xf60f
+rtl: esyms: rtems_assoc_ptr_by_local ->   0xf653
+rtl: esyms: rtems_assoc_ptr_by_remote ->   0xf6b3
+rtl: esyms: rtems_assoc_remote_by_local ->   0xf713
+rtl: esyms: rtems_cache_coherent_add_area ->   0xf879
+rtl: esyms: rtems_cache_flush_multiple_data_lines ->   0xb6a5
+rtl: esyms: rtems_cache_get_instruction_line_size ->   0xb6d9
+rtl: esyms: rtems_cache_get_maximal_line_size ->   0xb6e9
+rtl: esyms: rtems_cache_instruction_sync_after_code_change ->   0xb6f9
+rtl: esyms: rtems_cache_invalidate_multiple_instruction_lines ->   0xb6bf
+rtl: esyms: rtems_chain_append ->  0x23b4b
+rtl: esyms: rtems_chain_extract ->  0x23b21
+rtl: esyms: rtems_clock_get_ticks_per_second ->  0x204fd
+rtl: esyms: rtems_counter_initialize_converter ->  0x23b79
+rtl: esyms: rtems_current_user_env_get ->  0x1130d
+rtl: esyms: rtems_current_user_env_key -> 0x1035dc
+rtl: esyms: rtems_deviceio_close ->  0x11873
+rtl: esyms: rtems_deviceio_control ->  0x119a3
+rtl: esyms: rtems_deviceio_open ->  0x11833
+rtl: esyms: rtems_deviceio_read ->  0x118af
+rtl: esyms: rtems_deviceio_write ->  0x11929
+rtl: esyms: rtems_event_receive ->  0x20617
+rtl: esyms: rtems_event_send ->  0x20c2b
+rtl: esyms: rtems_event_system_send ->  0x22eb9
+rtl: esyms: rtems_fatal ->  0x23d35
+rtl: esyms: rtems_fatal_error_occurred ->  0x23d1b
+rtl: esyms: rtems_filesystem_check_access ->  0x11773
+rtl: esyms: rtems_filesystem_default_are_nodes_equal ->   0xc4e9
+rtl: esyms: rtems_filesystem_default_close ->   0xc511
+rtl: esyms: rtems_filesystem_default_eval_path ->   0xc527
+rtl: esyms: rtems_filesystem_default_fcntl ->   0xc547
+rtl: esyms: rtems_filesystem_default_freenode ->   0xc55f
+rtl: esyms: rtems_filesystem_default_fstat ->   0xc573
+rtl: esyms: rtems_filesystem_default_fsunmount ->   0xc593
+rtl: esyms: rtems_filesystem_default_fsync_or_fdatasync ->   0xc5a7
+rtl: esyms: rtems_filesystem_default_fsync_or_fdatasync_success ->   0xc5c5
+rtl: esyms: rtems_filesystem_default_ftruncate ->   0xc5db
+rtl: esyms: rtems_filesystem_default_ftruncate_directory ->   0xc5fd
+rtl: esyms: rtems_filesystem_default_ioctl ->   0xc61f
+rtl: esyms: rtems_filesystem_default_kqfilter ->   0xc641
+rtl: esyms: rtems_filesystem_default_lock ->   0xc68d
+rtl: esyms: rtems_filesystem_default_lseek ->   0xc6b5
+rtl: esyms: rtems_filesystem_default_lseek_directory ->   0xc6dd
+rtl: esyms: rtems_filesystem_default_lseek_file ->   0xc72b
+rtl: esyms: rtems_filesystem_default_open ->   0xc84d
+rtl: esyms: rtems_filesystem_default_pathconf ->  0x50bc0
+rtl: esyms: rtems_filesystem_default_poll ->   0xc869
+rtl: esyms: rtems_filesystem_default_read ->   0xc881
+rtl: esyms: rtems_filesystem_default_readv ->   0xc8a3
+rtl: esyms: rtems_filesystem_default_statvfs ->   0xc91d
+rtl: esyms: rtems_filesystem_default_unlock ->   0xc6a1
+rtl: esyms: rtems_filesystem_default_write ->   0xc93d
+rtl: esyms: rtems_filesystem_default_writev ->   0xc95f
+rtl: esyms: rtems_filesystem_do_unmount ->  0x12b2b
+rtl: esyms: rtems_filesystem_eval_path_check_access ->  0x117f7
+rtl: esyms: rtems_filesystem_eval_path_cleanup ->  0x11ff7
+rtl: esyms: rtems_filesystem_eval_path_cleanup_with_parent ->  0x1202f
+rtl: esyms: rtems_filesystem_eval_path_continue ->  0x11ce5
+rtl: esyms: rtems_filesystem_eval_path_eat_delimiter ->  0x12bbb
+rtl: esyms: rtems_filesystem_eval_path_error ->  0x11f69
+rtl: esyms: rtems_filesystem_eval_path_generic ->  0x12235
+rtl: esyms: rtems_filesystem_eval_path_next_token ->  0x12c7b
+rtl: esyms: rtems_filesystem_eval_path_recursive ->  0x11ec9
+rtl: esyms: rtems_filesystem_eval_path_restart ->  0x1204d
+rtl: esyms: rtems_filesystem_eval_path_start ->  0x11ddd
+rtl: esyms: rtems_filesystem_eval_path_start_with_parent ->  0x11e19
+rtl: esyms: rtems_filesystem_eval_path_start_with_root_and_current ->  0x11d7b
+rtl: esyms: rtems_filesystem_get_mount_handler ->  0x10819
+rtl: esyms: rtems_filesystem_global_location_assign ->  0x128fd
 rtl: esyms: rtems_filesystem_global_location_null -> 0x101568
-rtl: esyms: rtems_filesystem_global_location_obtain ->  0x12311
-rtl: esyms: rtems_filesystem_global_location_release ->  0x12381
-rtl: esyms: rtems_filesystem_handlers_default ->  0x4b888
-rtl: esyms: rtems_filesystem_initialize ->   0xf035
-rtl: esyms: rtems_filesystem_iterate ->  0x10023
-rtl: esyms: rtems_filesystem_location_clone ->   0xf1cf
-rtl: esyms: rtems_filesystem_location_copy ->  0x12125
-rtl: esyms: rtems_filesystem_location_copy_and_detach ->  0x12183
-rtl: esyms: rtems_filesystem_location_detach ->  0x12167
-rtl: esyms: rtems_filesystem_location_free ->   0xf36f
-rtl: esyms: rtems_filesystem_location_remove_from_mt_entry ->  0x123ed
-rtl: esyms: rtems_filesystem_location_transform_to_global ->  0x121a9
-rtl: esyms: rtems_filesystem_mknod ->   0xfe15
+rtl: esyms: rtems_filesystem_global_location_obtain ->  0x12a09
+rtl: esyms: rtems_filesystem_global_location_release ->  0x12a79
+rtl: esyms: rtems_filesystem_handlers_default ->  0x4ffe8
+rtl: esyms: rtems_filesystem_initialize ->   0xf73d
+rtl: esyms: rtems_filesystem_iterate ->  0x1072b
+rtl: esyms: rtems_filesystem_location_clone ->   0xf8d7
+rtl: esyms: rtems_filesystem_location_copy ->  0x1281d
+rtl: esyms: rtems_filesystem_location_copy_and_detach ->  0x1287b
+rtl: esyms: rtems_filesystem_location_detach ->  0x1285f
+rtl: esyms: rtems_filesystem_location_free ->   0xfa77
+rtl: esyms: rtems_filesystem_location_remove_from_mt_entry ->  0x12ae5
+rtl: esyms: rtems_filesystem_location_transform_to_global ->  0x128a1
+rtl: esyms: rtems_filesystem_mknod ->  0x1051d
 rtl: esyms: rtems_filesystem_mount_table -> 0x1015ec
-rtl: esyms: rtems_filesystem_null_handlers ->  0x4c150
+rtl: esyms: rtems_filesystem_null_handlers ->  0x508f4
 rtl: esyms: rtems_filesystem_null_mt_entry -> 0x101528
-rtl: esyms: rtems_filesystem_root_configuration ->  0x3b628
-rtl: esyms: rtems_filesystem_table ->  0x3b5b0
+rtl: esyms: rtems_filesystem_root_configuration ->  0x3d288
+rtl: esyms: rtems_filesystem_table ->  0x3d210
 rtl: esyms: rtems_global_user_env -> 0x10158c
-rtl: esyms: rtems_heap_allocate_aligned_with_boundary ->   0xfc45
-rtl: esyms: rtems_heap_null_extend ->  0x10faf
-rtl: esyms: rtems_initialize_executive ->  0x2309f
-rtl: esyms: rtems_interrupt_handler_install ->   0xbac9
-rtl: esyms: rtems_io_close ->  0x23171
-rtl: esyms: rtems_io_control ->  0x231c9
-rtl: esyms: rtems_io_initialize ->  0x23221
-rtl: esyms: rtems_io_open ->  0x23277
-rtl: esyms: rtems_io_read ->  0x232cf
-rtl: esyms: rtems_io_register_name ->   0xeb5d
-rtl: esyms: rtems_io_write ->  0x23327
-rtl: esyms: rtems_libio_allocate ->   0xf611
-rtl: esyms: rtems_libio_exit ->   0xf6a9
-rtl: esyms: rtems_libio_fcntl_flags ->   0xf5c3
-rtl: esyms: rtems_libio_free ->   0xf667
-rtl: esyms: rtems_libio_free_user_env ->  0x10c47
-rtl: esyms: rtems_libio_iop_freelist -> 0x1034fc
-rtl: esyms: rtems_libio_iops -> 0x102d98
-rtl: esyms: rtems_libio_number_iops ->  0x3b5ac
-rtl: esyms: rtems_libio_post_driver ->  0x10afd
-rtl: esyms: rtems_libio_semaphore -> 0x103500
-rtl: esyms: rtems_malloc_dirty_helper -> 0x1027a4
-rtl: esyms: rtems_malloc_extend_handler ->  0x3b690
+rtl: esyms: rtems_heap_allocate_aligned_with_boundary ->  0x1034d
+rtl: esyms: rtems_heap_null_extend ->  0x116a7
+rtl: esyms: rtems_initialize_executive ->  0x23cbd
+rtl: esyms: rtems_interrupt_handler_install ->   0xc193
+rtl: esyms: rtems_io_close ->  0x23d91
+rtl: esyms: rtems_io_control ->  0x23de9
+rtl: esyms: rtems_io_initialize ->  0x23e41
+rtl: esyms: rtems_io_open ->  0x23e97
+rtl: esyms: rtems_io_read ->  0x23eef
+rtl: esyms: rtems_io_register_name ->   0xf265
+rtl: esyms: rtems_io_write ->  0x23f47
+rtl: esyms: rtems_libio_allocate ->   0xfd19
+rtl: esyms: rtems_libio_exit ->   0xfdb1
+rtl: esyms: rtems_libio_fcntl_flags ->   0xfccb
+rtl: esyms: rtems_libio_free ->   0xfd6f
+rtl: esyms: rtems_libio_free_user_env ->  0x1133f
+rtl: esyms: rtems_libio_iop_freelist -> 0x1035e0
+rtl: esyms: rtems_libio_iops -> 0x102e78
+rtl: esyms: rtems_libio_number_iops ->  0x3d20c
+rtl: esyms: rtems_libio_post_driver ->  0x111f5
+rtl: esyms: rtems_libio_semaphore -> 0x1035e4
+rtl: esyms: rtems_malloc_dirty_helper -> 0x102884
+rtl: esyms: rtems_malloc_extend_handler ->  0x3d2f0
 rtl: esyms: rtems_minimum_stack_size -> 0x101484
-rtl: esyms: rtems_printf ->  0x10bad
-rtl: esyms: rtems_putc ->  0x10fc7
-rtl: esyms: rtems_rtl_alloc_del ->  0x158b9
-rtl: esyms: rtems_rtl_alloc_heap ->  0x15717
-rtl: esyms: rtems_rtl_alloc_initialise ->  0x157f3
-rtl: esyms: rtems_rtl_alloc_module_del ->  0x159ff
-rtl: esyms: rtems_rtl_alloc_module_new ->  0x1591d
-rtl: esyms: rtems_rtl_alloc_new ->  0x15837
-rtl: esyms: rtems_rtl_base_sym_global_add ->  0x1cbef
-rtl: esyms: rtems_rtl_baseimage ->  0x1cc4d
-rtl: esyms: rtems_rtl_chain_iterate ->  0x15b35
-rtl: esyms: rtems_rtl_check_handle ->  0x1c795
-rtl: esyms: rtems_rtl_elf_file_check ->  0x16d15
-rtl: esyms: rtems_rtl_elf_file_load ->  0x16fdd
-rtl: esyms: rtems_rtl_elf_file_sig ->  0x171a5
-rtl: esyms: rtems_rtl_elf_find_symbol ->  0x15e31
-rtl: esyms: rtems_rtl_elf_load_details ->  0x16d9d
-rtl: esyms: rtems_rtl_elf_rel_resolve_sym ->  0x17471
-rtl: esyms: rtems_rtl_elf_relocate_rel ->  0x174ad
-rtl: esyms: rtems_rtl_elf_relocate_rela ->  0x17487
-rtl: esyms: rtems_rtl_find_file ->  0x1725f
-rtl: esyms: rtems_rtl_find_obj ->  0x1c7f9
-rtl: esyms: rtems_rtl_get_error ->  0x171fb
-rtl: esyms: rtems_rtl_global_symbols ->  0x1c559
-rtl: esyms: rtems_rtl_load_object ->  0x1c8e9
-rtl: esyms: rtems_rtl_lock ->  0x1c6f5
-rtl: esyms: rtems_rtl_match_name ->  0x18c49
-rtl: esyms: rtems_rtl_obj_add_section ->  0x18d5f
-rtl: esyms: rtems_rtl_obj_alloc ->  0x18771
-rtl: esyms: rtems_rtl_obj_bss_alignment ->  0x18f91
-rtl: esyms: rtems_rtl_obj_bss_size ->  0x18f77
-rtl: esyms: rtems_rtl_obj_cache_close ->  0x17d4f
-rtl: esyms: rtems_rtl_obj_cache_flush ->  0x17da5
-rtl: esyms: rtems_rtl_obj_cache_open ->  0x17ced
-rtl: esyms: rtems_rtl_obj_cache_read ->  0x17df3
-rtl: esyms: rtems_rtl_obj_cache_read_byval ->  0x181d7
-rtl: esyms: rtems_rtl_obj_caches ->  0x1c5c1
-rtl: esyms: rtems_rtl_obj_caches_flush ->  0x1c655
-rtl: esyms: rtems_rtl_obj_comp ->  0x1c6a1
-rtl: esyms: rtems_rtl_obj_comp_close ->  0x182a5
-rtl: esyms: rtems_rtl_obj_comp_open ->  0x18237
-rtl: esyms: rtems_rtl_obj_comp_read ->  0x18331
-rtl: esyms: rtems_rtl_obj_comp_set ->  0x182f1
-rtl: esyms: rtems_rtl_obj_const_alignment ->  0x18f29
-rtl: esyms: rtems_rtl_obj_const_size ->  0x18f0f
-rtl: esyms: rtems_rtl_obj_data_alignment ->  0x18f5d
-rtl: esyms: rtems_rtl_obj_data_size ->  0x18f43
-rtl: esyms: rtems_rtl_obj_file_load ->  0x1992d
-rtl: esyms: rtems_rtl_obj_find_file ->  0x18cd5
-rtl: esyms: rtems_rtl_obj_find_section ->  0x18e41
-rtl: esyms: rtems_rtl_obj_find_section_by_index ->  0x18ea9
-rtl: esyms: rtems_rtl_obj_free ->  0x187f5
-rtl: esyms: rtems_rtl_obj_load ->  0x199a5
-rtl: esyms: rtems_rtl_obj_load_sections ->  0x1922d
-rtl: esyms: rtems_rtl_obj_load_symbols ->  0x190d7
-rtl: esyms: rtems_rtl_obj_relocate ->  0x18fab
-rtl: esyms: rtems_rtl_obj_relocate_unresolved ->  0x162cb
-rtl: esyms: rtems_rtl_obj_run_ctors ->  0x19485
-rtl: esyms: rtems_rtl_obj_run_dtors ->  0x1949d
-rtl: esyms: rtems_rtl_obj_synchronize_cache ->  0x1907d
-rtl: esyms: rtems_rtl_obj_text_alignment ->  0x18ef5
-rtl: esyms: rtems_rtl_obj_text_size ->  0x18edb
-rtl: esyms: rtems_rtl_obj_unload ->  0x19a75
-rtl: esyms: rtems_rtl_parse_name ->  0x1889d
-rtl: esyms: rtems_rtl_path_append ->  0x1cbd5
-rtl: esyms: rtems_rtl_rap_file_check ->  0x1a6dd
-rtl: esyms: rtems_rtl_rap_file_load ->  0x1a775
-rtl: esyms: rtems_rtl_rap_file_sig ->  0x1ad6d
-rtl: esyms: rtems_rtl_set_error ->  0x171bb
-rtl: esyms: rtems_rtl_strdup ->  0x1ad83
-rtl: esyms: rtems_rtl_symbol_global_add ->  0x1b089
-rtl: esyms: rtems_rtl_symbol_global_find ->  0x1b299
-rtl: esyms: rtems_rtl_symbol_obj_add ->  0x1b3b5
-rtl: esyms: rtems_rtl_symbol_obj_erase ->  0x1b42b
-rtl: esyms: rtems_rtl_symbol_obj_erase_local ->  0x1b3f5
-rtl: esyms: rtems_rtl_symbol_obj_find ->  0x1b31b
-rtl: esyms: rtems_rtl_symbol_table_close ->  0x1b06d
-rtl: esyms: rtems_rtl_symbol_table_open ->  0x1afe5
-rtl: esyms: rtems_rtl_trace ->  0x1b4a5
-rtl: esyms: rtems_rtl_trace_set_mask ->  0x1b4d5
-rtl: esyms: rtems_rtl_unload_object ->  0x1c9cf
-rtl: esyms: rtems_rtl_unlock ->  0x1c74f
-rtl: esyms: rtems_rtl_unresolved ->  0x1c58d
-rtl: esyms: rtems_rtl_unresolved_add ->  0x1bd27
-rtl: esyms: rtems_rtl_unresolved_interate ->  0x1bc9d
-rtl: esyms: rtems_rtl_unresolved_resolve ->  0x1bed9
-rtl: esyms: rtems_rtl_unresolved_table_close ->  0x1bc55
-rtl: esyms: rtems_rtl_unresolved_table_open ->  0x1bc25
-rtl: esyms: rtems_semaphore_create ->  0x20b1b
-rtl: esyms: rtems_semaphore_delete ->  0x20fef
-rtl: esyms: rtems_semaphore_obtain ->  0x2188f
-rtl: esyms: rtems_semaphore_release ->  0x22145
-rtl: esyms: rtems_shutdown_executive ->  0x230e1
-rtl: esyms: rtems_status_code_to_errno ->  0x222ad
-rtl: esyms: rtems_task_create ->  0x22579
-rtl: esyms: rtems_task_delete ->  0x227f9
-rtl: esyms: rtems_task_start ->  0x22ad3
-rtl: esyms: rtems_task_wake_after ->  0x22d63
-rtl: esyms: rtems_termios_baud_table ->  0x4c674
-rtl: esyms: rtems_termios_close ->  0x1314d
-rtl: esyms: rtems_termios_enqueue_raw_characters ->  0x143fb
-rtl: esyms: rtems_termios_initialize ->  0x149ed
-rtl: esyms: rtems_termios_ioctl ->  0x133a9
-rtl: esyms: rtems_termios_linesw -> 0x1029c8
-rtl: esyms: rtems_termios_number_to_baud ->  0x1497b
-rtl: esyms: rtems_termios_open ->  0x12f91
-rtl: esyms: rtems_termios_puts ->  0x1377b
-rtl: esyms: rtems_termios_read ->  0x142b3
-rtl: esyms: rtems_termios_set_initial_baud ->  0x149a7
-rtl: esyms: rtems_termios_ttyMutex -> 0x103504
-rtl: esyms: rtems_termios_write ->  0x13aa1
-rtl: esyms: rtems_test_fatal_extension ->  0x31a81
-rtl: esyms: rtems_test_name ->  0x3b550
-rtl: esyms: setlocale ->  0x33fe1
-rtl: esyms: sigemptyset ->  0x1f893
-rtl: esyms: sprintf ->  0x35485
-rtl: esyms: stat ->  0x10fe9
-rtl: esyms: strchr ->  0x35579
-rtl: esyms: strcmp ->  0x35669
-rtl: esyms: strcpy ->  0x3593d
-rtl: esyms: strdup ->  0x35a01
-rtl: esyms: strerror ->  0x35ead
-rtl: esyms: strlen ->  0x35f01
-rtl: esyms: strncmp ->  0x35fdd
-rtl: esyms: strncpy ->  0x36079
-rtl: esyms: strrchr ->  0x360e9
-rtl: esyms: strtoul ->  0x36265
-rtl: esyms: symlink ->  0x125cf
-rtl: esyms: time ->  0x388e1
-rtl: esyms: unlink ->  0x14a5f
-rtl: esyms: vfiprintf ->  0x396d5
-rtl: esyms: vfprintf ->  0x3b17d
-rtl: esyms: vprintk ->  0x14ae5
-rtl: esyms: vsnprintf ->  0x3b299
-rtl: esyms: wcrtomb ->  0x3b3d9
-rtl: esyms: write ->  0x14fad
-rtl: esyms: zynq_uart_fns ->  0x4b864
-rtl: esyms: _ZGVNSt10moneypunctIcLb0EE2idE -> 0x10288c
-rtl: esyms: _ZGVNSt10moneypunctIcLb1EE2idE -> 0x102888
-rtl: esyms: _ZGVNSt10moneypunctIwLb0EE2idE -> 0x1028bc
-rtl: esyms: _ZGVNSt10moneypunctIwLb1EE2idE -> 0x1028b8
-rtl: esyms: _ZGVNSt11__timepunctIcE2idE -> 0x102870
-rtl: esyms: _ZGVNSt11__timepunctIwE2idE -> 0x1028a0
-rtl: esyms: _ZGVNSt7__cxx1110moneypunctIcLb0EE2idE -> 0x10283c
-rtl: esyms: _ZGVNSt7__cxx1110moneypunctIcLb1EE2idE -> 0x102838
-rtl: esyms: _ZGVNSt7__cxx1110moneypunctIwLb0EE2idE -> 0x10285c
-rtl: esyms: _ZGVNSt7__cxx1110moneypunctIwLb1EE2idE -> 0x102858
-rtl: esyms: _ZGVNSt7__cxx117collateIcE2idE -> 0x102820
-rtl: esyms: _ZGVNSt7__cxx117collateIwE2idE -> 0x102840
-rtl: esyms: _ZGVNSt7__cxx118messagesIcE2idE -> 0x102824
-rtl: esyms: _ZGVNSt7__cxx118messagesIwE2idE -> 0x102844
-rtl: esyms: _ZGVNSt7__cxx118numpunctIcE2idE -> 0x10282c
-rtl: esyms: _ZGVNSt7__cxx118numpunctIwE2idE -> 0x10284c
-rtl: esyms: _ZGVNSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102828
-rtl: esyms: _ZGVNSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102848
-rtl: esyms: _ZGVNSt7__cxx119money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102834
-rtl: esyms: _ZGVNSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102854
-rtl: esyms: _ZGVNSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102830
-rtl: esyms: _ZGVNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102850
-rtl: esyms: _ZGVNSt7collateIcE2idE -> 0x102860
-rtl: esyms: _ZGVNSt7collateIwE2idE -> 0x102890
-rtl: esyms: _ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102878
-rtl: esyms: _ZGVNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x1028a8
-rtl: esyms: _ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102874
-rtl: esyms: _ZGVNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x1028a4
-rtl: esyms: _ZGVNSt8messagesIcE2idE -> 0x102864
-rtl: esyms: _ZGVNSt8messagesIwE2idE -> 0x102894
-rtl: esyms: _ZGVNSt8numpunctIcE2idE -> 0x10287c
-rtl: esyms: _ZGVNSt8numpunctIwE2idE -> 0x1028ac
-rtl: esyms: _ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102868
-rtl: esyms: _ZGVNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102898
-rtl: esyms: _ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x10286c
-rtl: esyms: _ZGVNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x10289c
-rtl: esyms: _ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102884
-rtl: esyms: _ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x1028b4
-rtl: esyms: _ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102880
-rtl: esyms: _ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x1028b0
-rtl: esyms: _ZN17__eh_globals_initD1Ev ->   0x14d9
-rtl: esyms: _ZN17__eh_globals_initD2Ev ->   0x14d9
-rtl: esyms: _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag ->   0x8899
-rtl: esyms: _ZNSs4_Rep10_M_destroyERKSaIcE ->   0x8895
-rtl: esyms: _ZNSs4_Rep20_S_empty_rep_storageE -> 0x102810
-rtl: esyms: _ZNSs4_Rep9_S_createEjjRKSaIcE ->   0x87e9
-rtl: esyms: _ZNSsC1EPKcRKSaIcE ->   0x88e9
-rtl: esyms: _ZNSsC1EPKcjRKSaIcE ->   0x88cd
-rtl: esyms: _ZNSsC2EPKcRKSaIcE ->   0x88e9
-rtl: esyms: _ZNSsC2EPKcjRKSaIcE ->   0x88cd
-rtl: esyms: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERjj ->   0x8b19
-rtl: esyms: __aeabi_idiv0 ->   0x91e1
-rtl: esyms: __aeabi_ldiv0 ->   0x91e1
-rtl: esyms: __aeabi_unwind_cpp_pr1 ->   0x9ba5
-rtl: esyms: __aeabi_unwind_cpp_pr2 ->   0x9ba9
-rtl: esyms: a9mpcore_clock_periphclk ->   0xa3cf
-rtl: esyms: rtems_rtl_base_global_syms_init ->    0xdb1
-rtl: esyms: zynq_setup_mmu_and_cache ->    0x7a9
-rtl: esyms: zynq_uart_input_clock ->   0xbb41
+rtl: esyms: rtems_printf ->  0x112a5
+rtl: esyms: rtems_putc ->  0x116bf
+rtl: esyms: rtems_rtl_alloc_del ->  0x1600b
+rtl: esyms: rtems_rtl_alloc_heap ->  0x15e69
+rtl: esyms: rtems_rtl_alloc_initialise ->  0x15f45
+rtl: esyms: rtems_rtl_alloc_module_del ->  0x1618f
+rtl: esyms: rtems_rtl_alloc_module_new ->  0x1606f
+rtl: esyms: rtems_rtl_alloc_new ->  0x15f89
+rtl: esyms: rtems_rtl_base_sym_global_add ->  0x1d897
+rtl: esyms: rtems_rtl_baseimage ->  0x1d8f5
+rtl: esyms: rtems_rtl_chain_iterate ->  0x162d9
+rtl: esyms: rtems_rtl_check_handle ->  0x1d427
+rtl: esyms: rtems_rtl_elf_file_check ->  0x174f5
+rtl: esyms: rtems_rtl_elf_file_load ->  0x177eb
+rtl: esyms: rtems_rtl_elf_file_sig ->  0x179e1
+rtl: esyms: rtems_rtl_elf_file_unload ->  0x179c9
+rtl: esyms: rtems_rtl_elf_find_symbol ->  0x165d7
+rtl: esyms: rtems_rtl_elf_rel_resolve_sym ->  0x17e05
+rtl: esyms: rtems_rtl_elf_relocate_rel ->  0x17e41
+rtl: esyms: rtems_rtl_elf_relocate_rela ->  0x17e1b
+rtl: esyms: rtems_rtl_elf_section_flags ->  0x17dd5
+rtl: esyms: rtems_rtl_elf_unwind_deregister ->  0x186e9
+rtl: esyms: rtems_rtl_elf_unwind_parse ->  0x186b9
+rtl: esyms: rtems_rtl_elf_unwind_register ->  0x186d3
+rtl: esyms: rtems_rtl_find_file ->  0x17ab5
+rtl: esyms: rtems_rtl_find_obj ->  0x1d48b
+rtl: esyms: rtems_rtl_get_error ->  0x17a37
+rtl: esyms: rtems_rtl_global_symbols ->  0x1d1eb
+rtl: esyms: rtems_rtl_load_object ->  0x1d57b
+rtl: esyms: rtems_rtl_lock ->  0x1d387
+rtl: esyms: rtems_rtl_match_name ->  0x19729
+rtl: esyms: rtems_rtl_obj_add_section ->  0x1983f
+rtl: esyms: rtems_rtl_obj_alloc ->  0x19237
+rtl: esyms: rtems_rtl_obj_bss_alignment ->  0x19aad
+rtl: esyms: rtems_rtl_obj_bss_size ->  0x19a93
+rtl: esyms: rtems_rtl_obj_cache_close ->  0x187ff
+rtl: esyms: rtems_rtl_obj_cache_flush ->  0x18855
+rtl: esyms: rtems_rtl_obj_cache_open ->  0x1879d
+rtl: esyms: rtems_rtl_obj_cache_read ->  0x188a3
+rtl: esyms: rtems_rtl_obj_cache_read_byval ->  0x18c87
+rtl: esyms: rtems_rtl_obj_caches ->  0x1d253
+rtl: esyms: rtems_rtl_obj_caches_flush ->  0x1d2e7
+rtl: esyms: rtems_rtl_obj_comp ->  0x1d333
+rtl: esyms: rtems_rtl_obj_comp_close ->  0x18d55
+rtl: esyms: rtems_rtl_obj_comp_open ->  0x18ce7
+rtl: esyms: rtems_rtl_obj_comp_read ->  0x18de1
+rtl: esyms: rtems_rtl_obj_comp_set ->  0x18da1
+rtl: esyms: rtems_rtl_obj_const_alignment ->  0x19a45
+rtl: esyms: rtems_rtl_obj_const_size ->  0x199f7
+rtl: esyms: rtems_rtl_obj_data_alignment ->  0x19a79
+rtl: esyms: rtems_rtl_obj_data_size ->  0x19a5f
+rtl: esyms: rtems_rtl_obj_eh_alignment ->  0x19a11
+rtl: esyms: rtems_rtl_obj_eh_size ->  0x19a2b
+rtl: esyms: rtems_rtl_obj_find_file ->  0x197b5
+rtl: esyms: rtems_rtl_obj_find_section ->  0x19929
+rtl: esyms: rtems_rtl_obj_find_section_by_index ->  0x19991
+rtl: esyms: rtems_rtl_obj_free ->  0x192c3
+rtl: esyms: rtems_rtl_obj_load ->  0x1a591
+rtl: esyms: rtems_rtl_obj_load_sections ->  0x19d6b
+rtl: esyms: rtems_rtl_obj_load_symbols ->  0x19c0b
+rtl: esyms: rtems_rtl_obj_relocate ->  0x19ac7
+rtl: esyms: rtems_rtl_obj_relocate_unresolved ->  0x16a71
+rtl: esyms: rtems_rtl_obj_run_ctors ->  0x1a039
+rtl: esyms: rtems_rtl_obj_run_dtors ->  0x1a051
+rtl: esyms: rtems_rtl_obj_synchronize_cache ->  0x19ba9
+rtl: esyms: rtems_rtl_obj_text_alignment ->  0x199dd
+rtl: esyms: rtems_rtl_obj_text_size ->  0x199c3
+rtl: esyms: rtems_rtl_obj_unload ->  0x1a655
+rtl: esyms: rtems_rtl_parse_name ->  0x1937d
+rtl: esyms: rtems_rtl_path_append ->  0x1d87d
+rtl: esyms: rtems_rtl_rap_file_check ->  0x1b2d7
+rtl: esyms: rtems_rtl_rap_file_load ->  0x1b36f
+rtl: esyms: rtems_rtl_rap_file_sig ->  0x1b989
+rtl: esyms: rtems_rtl_rap_file_unload ->  0x1b973
+rtl: esyms: rtems_rtl_set_error ->  0x179f7
+rtl: esyms: rtems_rtl_strdup ->  0x1b99f
+rtl: esyms: rtems_rtl_symbol_global_add ->  0x1bcbb
+rtl: esyms: rtems_rtl_symbol_global_find ->  0x1becb
+rtl: esyms: rtems_rtl_symbol_obj_add ->  0x1bfe7
+rtl: esyms: rtems_rtl_symbol_obj_erase ->  0x1c05d
+rtl: esyms: rtems_rtl_symbol_obj_erase_local ->  0x1c027
+rtl: esyms: rtems_rtl_symbol_obj_find ->  0x1bf4d
+rtl: esyms: rtems_rtl_symbol_table_close ->  0x1bc9f
+rtl: esyms: rtems_rtl_symbol_table_open ->  0x1bc17
+rtl: esyms: rtems_rtl_trace ->  0x1c0d7
+rtl: esyms: rtems_rtl_trace_set_mask ->  0x1c107
+rtl: esyms: rtems_rtl_unload_object ->  0x1d66d
+rtl: esyms: rtems_rtl_unlock ->  0x1d3e1
+rtl: esyms: rtems_rtl_unresolved ->  0x1d21f
+rtl: esyms: rtems_rtl_unresolved_add ->  0x1c959
+rtl: esyms: rtems_rtl_unresolved_interate ->  0x1c8cf
+rtl: esyms: rtems_rtl_unresolved_resolve ->  0x1cb0b
+rtl: esyms: rtems_rtl_unresolved_table_close ->  0x1c887
+rtl: esyms: rtems_rtl_unresolved_table_open ->  0x1c857
+rtl: esyms: rtems_semaphore_create ->  0x2183b
+rtl: esyms: rtems_semaphore_delete ->  0x21ccb
+rtl: esyms: rtems_semaphore_obtain ->  0x2256f
+rtl: esyms: rtems_semaphore_release ->  0x22d09
+rtl: esyms: rtems_shutdown_executive ->  0x23d01
+rtl: esyms: rtems_status_code_to_errno ->  0x22e75
+rtl: esyms: rtems_task_create ->  0x23177
+rtl: esyms: rtems_task_delete ->  0x23423
+rtl: esyms: rtems_task_start ->  0x23729
+rtl: esyms: rtems_task_wake_after ->  0x23967
+rtl: esyms: rtems_termios_baud_table ->  0x50e20
+rtl: esyms: rtems_termios_close ->  0x13881
+rtl: esyms: rtems_termios_enqueue_raw_characters ->  0x14b4d
+rtl: esyms: rtems_termios_initialize ->  0x1513f
+rtl: esyms: rtems_termios_ioctl ->  0x13ac1
+rtl: esyms: rtems_termios_linesw -> 0x102aa8
+rtl: esyms: rtems_termios_number_to_baud ->  0x150cd
+rtl: esyms: rtems_termios_open ->  0x136ed
+rtl: esyms: rtems_termios_puts ->  0x13ec1
+rtl: esyms: rtems_termios_read ->  0x14aa3
+rtl: esyms: rtems_termios_set_initial_baud ->  0x150f9
+rtl: esyms: rtems_termios_ttyMutex -> 0x1035e8
+rtl: esyms: rtems_termios_write ->  0x1422b
+rtl: esyms: rtems_test_fatal_extension ->  0x33601
+rtl: esyms: rtems_test_name ->  0x3d1b0
+rtl: esyms: setlocale ->  0x35b89
+rtl: esyms: sigemptyset ->  0x204cf
+rtl: esyms: sprintf ->  0x37085
+rtl: esyms: stat ->  0x116e1
+rtl: esyms: strchr ->  0x37179
+rtl: esyms: strcmp ->  0x37269
+rtl: esyms: strcpy ->  0x3753d
+rtl: esyms: strdup ->  0x37601
+rtl: esyms: strerror ->  0x37aad
+rtl: esyms: strerror_l ->  0x37ac5
+rtl: esyms: strlen ->  0x37b01
+rtl: esyms: strncmp ->  0x37bdd
+rtl: esyms: strncpy ->  0x37c79
+rtl: esyms: strrchr ->  0x37ce9
+rtl: esyms: strtoul ->  0x37ea1
+rtl: esyms: strtoul_l ->  0x37e81
+rtl: esyms: symlink ->  0x12cc7
+rtl: esyms: time ->  0x3a539
+rtl: esyms: unlink ->  0x151b1
+rtl: esyms: vfiprintf ->  0x3b32d
+rtl: esyms: vfprintf ->  0x3cdd5
+rtl: esyms: vprintk ->  0x15237
+rtl: esyms: vsnprintf ->  0x3cef1
+rtl: esyms: wcrtomb ->  0x3d02d
+rtl: esyms: write ->  0x156ff
+rtl: esyms: zynq_uart_fns ->  0x4ffc4
+rtl: esyms: zynq_uart_reset_tx_flush ->   0xc495
+rtl: esyms: _ZGVNSt10moneypunctIcLb0EE2idE -> 0x102968
+rtl: esyms: _ZGVNSt10moneypunctIcLb1EE2idE -> 0x102964
+rtl: esyms: _ZGVNSt10moneypunctIwLb0EE2idE -> 0x102998
+rtl: esyms: _ZGVNSt10moneypunctIwLb1EE2idE -> 0x102994
+rtl: esyms: _ZGVNSt11__timepunctIcE2idE -> 0x10294c
+rtl: esyms: _ZGVNSt11__timepunctIwE2idE -> 0x10297c
+rtl: esyms: _ZGVNSt7__cxx1110moneypunctIcLb0EE2idE -> 0x102918
+rtl: esyms: _ZGVNSt7__cxx1110moneypunctIcLb1EE2idE -> 0x102914
+rtl: esyms: _ZGVNSt7__cxx1110moneypunctIwLb0EE2idE -> 0x102938
+rtl: esyms: _ZGVNSt7__cxx1110moneypunctIwLb1EE2idE -> 0x102934
+rtl: esyms: _ZGVNSt7__cxx117collateIcE2idE -> 0x1028fc
+rtl: esyms: _ZGVNSt7__cxx117collateIwE2idE -> 0x10291c
+rtl: esyms: _ZGVNSt7__cxx118messagesIcE2idE -> 0x102900
+rtl: esyms: _ZGVNSt7__cxx118messagesIwE2idE -> 0x102920
+rtl: esyms: _ZGVNSt7__cxx118numpunctIcE2idE -> 0x102908
+rtl: esyms: _ZGVNSt7__cxx118numpunctIwE2idE -> 0x102928
+rtl: esyms: _ZGVNSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102904
+rtl: esyms: _ZGVNSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102924
+rtl: esyms: _ZGVNSt7__cxx119money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102910
+rtl: esyms: _ZGVNSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102930
+rtl: esyms: _ZGVNSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x10290c
+rtl: esyms: _ZGVNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x10292c
+rtl: esyms: _ZGVNSt7collateIcE2idE -> 0x10293c
+rtl: esyms: _ZGVNSt7collateIwE2idE -> 0x10296c
+rtl: esyms: _ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102954
+rtl: esyms: _ZGVNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102984
+rtl: esyms: _ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102950
+rtl: esyms: _ZGVNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102980
+rtl: esyms: _ZGVNSt8messagesIcE2idE -> 0x102940
+rtl: esyms: _ZGVNSt8messagesIwE2idE -> 0x102970
+rtl: esyms: _ZGVNSt8numpunctIcE2idE -> 0x102958
+rtl: esyms: _ZGVNSt8numpunctIwE2idE -> 0x102988
+rtl: esyms: _ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102944
+rtl: esyms: _ZGVNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102974
+rtl: esyms: _ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102948
+rtl: esyms: _ZGVNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102978
+rtl: esyms: _ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x102960
+rtl: esyms: _ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x102990
+rtl: esyms: _ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE -> 0x10295c
+rtl: esyms: _ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE -> 0x10298c
+rtl: esyms: _ZN16dl_test_throw_meC1EPKc ->    0xdc1
+rtl: esyms: _ZN16dl_test_throw_meC2EPKc ->    0xdc1
+rtl: esyms: _ZN16dl_test_throw_meD1Ev ->    0xddf
+rtl: esyms: _ZN16dl_test_throw_meD2Ev ->    0xddf
+rtl: esyms: _ZN17__eh_globals_initD1Ev ->   0x1691
+rtl: esyms: _ZN17__eh_globals_initD2Ev ->   0x1691
+rtl: esyms: _ZNK16dl_test_throw_me4whatEv ->    0xdf5
+rtl: esyms: _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag ->   0x8efd
+rtl: esyms: _ZNSs4_Rep10_M_destroyERKSaIcE ->   0x8ef9
+rtl: esyms: _ZNSs4_Rep20_S_empty_rep_storageE -> 0x1028ec
+rtl: esyms: _ZNSs4_Rep9_S_createEjjRKSaIcE ->   0x8e4d
+rtl: esyms: _ZNSsC1EPKcRKSaIcE ->   0x8f4d
+rtl: esyms: _ZNSsC1EPKcjRKSaIcE ->   0x8f31
+rtl: esyms: _ZNSsC2EPKcRKSaIcE ->   0x8f4d
+rtl: esyms: _ZNSsC2EPKcjRKSaIcE ->   0x8f31
+rtl: esyms: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERjj ->   0x917d
+rtl: esyms: _ZTI16dl_test_throw_me ->  0x3d510
+rtl: esyms: _ZTS16dl_test_throw_me ->  0x3d518
+rtl: esyms: __aeabi_idiv0 ->   0x9849
+rtl: esyms: __aeabi_ldiv0 ->   0x9849
+rtl: esyms: __aeabi_unwind_cpp_pr1 ->   0xa20d
+rtl: esyms: __aeabi_unwind_cpp_pr2 ->   0xa211
+rtl: esyms: a9mpcore_clock_periphclk ->   0xaa4f
+rtl: esyms: rtems_rtl_base_global_syms_init ->    0xf69
+rtl: esyms: zynq_setup_mmu_and_cache ->    0x7dd
+rtl: esyms: zynq_uart_input_clock ->   0xc20b
 rtl: loading '/dl-o5.o'
-rtl: alloc: new: OBJECT addr=0x120840 size=9
+rtl: alloc: new: OBJECT addr=0x13c478 size=9
 rtl: alloc: del: OBJECT addr=0x0
-rtl: alloc: new: OBJECT addr=0x120870 size=136
-rtl: alloc: new: OBJECT addr=0x120920 size=9
-rtl: alloc: new: OBJECT addr=0x120950 size=9
-rtl: section header:  0: offset=24576
-rtl: section header:  1: offset=24616
-rtl: alloc: new: OBJECT addr=0x120980 size=56
-rtl: alloc: new: OBJECT addr=0x1209e0 size=6
-rtl: sect: 1 : .text
-rtl: section header:  2: offset=24656
-rtl: alloc: new: OBJECT addr=0x120a10 size=56
-rtl: alloc: new: OBJECT addr=0x120a70 size=6
-rtl: sect: 2 : .data
-rtl: section header:  3: offset=24696
-rtl: alloc: new: OBJECT addr=0x120aa0 size=56
-rtl: alloc: new: OBJECT addr=0x120b00 size=5
-rtl: sect: 3 : .bss
-rtl: section header:  4: offset=24736
-rtl: alloc: new: OBJECT addr=0x120b30 size=56
-rtl: alloc: new: OBJECT addr=0x120b90 size=35
-rtl: sect: 4 : .rodata._ZStL19piecewise_construct
-rtl: section header:  5: offset=24776
-rtl: alloc: new: OBJECT addr=0x120bd8 size=56
-rtl: alloc: new: OBJECT addr=0x120c38 size=8
-rtl: sect: 5 : .rodata
-rtl: section header:  6: offset=24816
-rtl: alloc: new: OBJECT addr=0x120c68 size=56
-rtl: alloc: new: OBJECT addr=0x120cc8 size=19
-rtl: sect: 6 : .text.exception_dl
-rtl: section header:  7: offset=24856
-rtl: alloc: new: OBJECT addr=0x120d00 size=56
-rtl: alloc: new: OBJECT addr=0x120d60 size=23
-rtl: sect: 7 : .rel.text.exception_dl
-rtl: section header:  8: offset=24896
-rtl: alloc: new: OBJECT addr=0x120da0 size=56
-rtl: alloc: new: OBJECT addr=0x120e00 size=29
-rtl: sect: 8 : .ARM.extab.text.exception_dl
-rtl: section header:  9: offset=24936
-rtl: alloc: new: OBJECT addr=0x120e48 size=56
-rtl: alloc: new: OBJECT addr=0x120ea8 size=33
-rtl: sect: 9 : .rel.ARM.extab.text.exception_dl
-rtl: section header: 10: offset=24976
-rtl: unsupported section: 10: type=1879048193 flags=82
-rtl: section header: 11: offset=25016
-rtl: alloc: new: OBJECT addr=0x120ef0 size=56
-rtl: alloc: new: OBJECT addr=0x120f50 size=33
-rtl: sect: 11: .rel.ARM.exidx.text.exception_dl
-rtl: section header: 12: offset=25056
-rtl: alloc: new: OBJECT addr=0x120f98 size=56
-rtl: alloc: new: OBJECT addr=0x120ff8 size=36
-rtl: sect: 12: .rodata._ZZ12exception_dlE8__func__
-rtl: section header: 13: offset=25096
-rtl: section header: 14: offset=25136
-rtl: alloc: new: OBJECT addr=0x121040 size=56
-rtl: alloc: new: OBJECT addr=0x1210a0 size=16
-rtl: sect: 14: .rel.debug_info
-rtl: section header: 15: offset=25176
-rtl: section header: 16: offset=25216
-rtl: section header: 17: offset=25256
-rtl: alloc: new: OBJECT addr=0x1210d8 size=56
-rtl: alloc: new: OBJECT addr=0x121138 size=19
-rtl: sect: 17: .rel.debug_aranges
-rtl: section header: 18: offset=25296
-rtl: section header: 19: offset=25336
-rtl: alloc: new: OBJECT addr=0x121170 size=56
-rtl: alloc: new: OBJECT addr=0x1211d0 size=18
-rtl: sect: 19: .rel.debug_ranges
-rtl: section header: 20: offset=25376
-rtl: section header: 21: offset=25416
-rtl: alloc: new: OBJECT addr=0x121208 size=56
-rtl: alloc: new: OBJECT addr=0x121268 size=16
-rtl: sect: 21: .rel.debug_line
-rtl: section header: 22: offset=25456
-rtl: section header: 23: offset=25496
-rtl: section header: 24: offset=25536
-rtl: section header: 25: offset=25576
-rtl: alloc: new: OBJECT addr=0x1212a0 size=56
-rtl: alloc: new: OBJECT addr=0x121300 size=17
-rtl: sect: 25: .rel.debug_frame
-rtl: section header: 26: offset=25616
-rtl: unsupported section: 26: type=1879048195 flags=00
-rtl: section header: 27: offset=25656
-rtl: alloc: new: OBJECT addr=0x121338 size=56
-rtl: alloc: new: OBJECT addr=0x121398 size=10
-rtl: sect: 27: .shstrtab
-rtl: section header: 28: offset=25696
-rtl: alloc: new: OBJECT addr=0x1213c8 size=56
-rtl: alloc: new: OBJECT addr=0x121428 size=8
-rtl: sect: 28: .symtab
-rtl: section header: 29: offset=25736
-rtl: alloc: new: OBJECT addr=0x121458 size=56
-rtl: alloc: new: OBJECT addr=0x1214b8 size=8
-rtl: sect: 29: .strtab
-rtl: alloc: new: READ_EXEC addr=0x1214e8 size=202
-rtl: alloc: new: READ addr=0x1215d8 size=170
-rtl: alloc: new: READ_WRITE addr=0x1216a8 size=1
-rtl: load sect: text  - b:0x1214e8 s:202 a:1
-rtl: load sect: const - b:0x1215d8 s:170 a:4
-rtl: load sect: data  - b:0x1216a8 s:1 a:1
-rtl: load sect: bss   - b:0x0 s:0 a:1
-rtl: loading: .text.exception_dl -> 0x1214e8 (198)
-rtl: loading: .rodata._ZStL19piecewise_construct -> 0x1215d8 (1)
-rtl: loading: .rodata -> 0x1215dc (81)
-rtl: loading: .ARM.extab.text.exception_dl -> 0x121630 (64)
-rtl: loading: .rodata._ZZ12exception_dlE8__func__ -> 0x121674 (13)
-rtl: alloc: new: SYMBOL addr=0x1216d8 size=310
-rtl: alloc: new: SYMBOL addr=0x121838 size=33
-rtl: sym:add:6  name:11:$d                   bind:0  type:0  val:0x1215d8 sect:4 size:0
-rtl: sym:add:7  name:14:_ZStL19piecewise_construct bind:0  type:1  val:0x1215d8 sect:4 size:1
-rtl: sym:add:9  name:11:$d                   bind:0  type:0  val:0x1215dc sect:5 size:0
-rtl: sym:add:10 name:41:.LC0                 bind:0  type:0  val:0x1215dc sect:5 size:0
-rtl: sym:add:11 name:46:.LC1                 bind:0  type:0  val:0x1215f4 sect:5 size:0
-rtl: sym:add:12 name:51:.LC2                 bind:0  type:0  val:0x121608 sect:5 size:0
-rtl: sym:add:13 name:56:.LC3                 bind:0  type:0  val:0x121618 sect:5 size:0
-rtl: sym:add:15 name:61:$t                   bind:0  type:0  val:0x1214e8 sect:6 size:0
-rtl: sym:add:16 name:64:_ZZ12exception_dlE8__func__ bind:0  type:1  val:0x121674 sect:12 size:13
-rtl: sym:add:18 name:11:$d                   bind:0  type:0  val:0x121630 sect:8 size:0
-rtl: sym:add:22 name:11:$d                   bind:0  type:0  val:0x121674 sect:12 size:0
-rtl: sym:add:33 name:92:exception_dl         bind:1  type:2  val:0x1214e9 sect:6 size:198
+rtl: alloc: new: OBJECT addr=0x13c4a8 size=144
+rtl: alloc: new: OBJECT addr=0x13c560 size=9
+rtl: alloc: new: OBJECT addr=0x13c590 size=9
+rtl: section header:  0: offset=28164
+rtl: section header:  1: offset=28204
+rtl: unsupported section:  1: type=17 flags=00
+rtl: section header:  2: offset=28244
+rtl: unsupported section:  2: type=17 flags=00
+rtl: section header:  3: offset=28284
+rtl: unsupported section:  3: type=17 flags=00
+rtl: section header:  4: offset=28324
+rtl: unsupported section:  4: type=17 flags=00
+rtl: section header:  5: offset=28364
+rtl: unsupported section:  5: type=17 flags=00
+rtl: section header:  6: offset=28404
+rtl: section header:  7: offset=28444
+rtl: section header:  8: offset=28484
+rtl: section header:  9: offset=28524
+rtl: alloc: new: OBJECT addr=0x13c5c0 size=56
+rtl: alloc: new: OBJECT addr=0x13c620 size=35
+rtl: sect: 9 : .rodata._ZStL19piecewise_construct (1)
+rtl: section header: 10: offset=28564
+rtl: alloc: new: OBJECT addr=0x13c668 size=56
+rtl: alloc: new: OBJECT addr=0x13c6c8 size=34
+rtl: sect: 10: .text._ZN16dl_test_throw_meC2EPKc (30)
+rtl: section header: 11: offset=28604
+rtl: section header: 12: offset=28644
+rtl: alloc: new: OBJECT addr=0x13c710 size=56
+rtl: alloc: new: OBJECT addr=0x13c770 size=44
+rtl: sect: 12: .ARM.exidx.text._ZN16dl_test_throw_meC2EPKc (8)
+rtl: section header: 13: offset=28684
+rtl: alloc: new: OBJECT addr=0x13c7c0 size=56
+rtl: alloc: new: OBJECT addr=0x13c820 size=48
+rtl: sect: 13: .rel.ARM.exidx.text._ZN16dl_test_throw_meC2EPKc (8)
+rtl: section header: 14: offset=28724
+rtl: alloc: new: OBJECT addr=0x13c878 size=56
+rtl: alloc: new: OBJECT addr=0x13c8d8 size=32
+rtl: sect: 14: .text._ZN16dl_test_throw_meD2Ev (22)
+rtl: section header: 15: offset=28764
+rtl: section header: 16: offset=28804
+rtl: alloc: new: OBJECT addr=0x13c920 size=56
+rtl: alloc: new: OBJECT addr=0x13c980 size=42
+rtl: sect: 16: .ARM.exidx.text._ZN16dl_test_throw_meD2Ev (8)
+rtl: section header: 17: offset=28844
+rtl: alloc: new: OBJECT addr=0x13c9d0 size=56
+rtl: alloc: new: OBJECT addr=0x13ca30 size=46
+rtl: sect: 17: .rel.ARM.exidx.text._ZN16dl_test_throw_meD2Ev (8)
+rtl: section header: 18: offset=28884
+rtl: alloc: new: OBJECT addr=0x13ca88 size=56
+rtl: alloc: new: OBJECT addr=0x13cae8 size=36
+rtl: sect: 18: .text._ZNK16dl_test_throw_me4whatEv (24)
+rtl: section header: 19: offset=28924
+rtl: section header: 20: offset=28964
+rtl: alloc: new: OBJECT addr=0x13cb30 size=56
+rtl: alloc: new: OBJECT addr=0x13cb90 size=46
+rtl: sect: 20: .ARM.exidx.text._ZNK16dl_test_throw_me4whatEv (8)
+rtl: section header: 21: offset=29004
+rtl: alloc: new: OBJECT addr=0x13cbe8 size=56
+rtl: alloc: new: OBJECT addr=0x13cc48 size=50
+rtl: sect: 21: .rel.ARM.exidx.text._ZNK16dl_test_throw_me4whatEv (8)
+rtl: section header: 22: offset=29044
+rtl: alloc: new: OBJECT addr=0x13cca0 size=56
+rtl: alloc: new: OBJECT addr=0x13cd00 size=8
+rtl: sect: 22: .rodata (169)
+rtl: section header: 23: offset=29084
+rtl: alloc: new: OBJECT addr=0x13cd30 size=56
+rtl: alloc: new: OBJECT addr=0x13cd90 size=19
+rtl: sect: 23: .text.exception_dl (342)
+rtl: section header: 24: offset=29124
+rtl: alloc: new: OBJECT addr=0x13cdc8 size=56
+rtl: alloc: new: OBJECT addr=0x13ce28 size=23
+rtl: sect: 24: .rel.text.exception_dl (448)
+rtl: section header: 25: offset=29164
+rtl: alloc: new: OBJECT addr=0x13ce68 size=56
+rtl: alloc: new: OBJECT addr=0x13cec8 size=29
+rtl: sect: 25: .ARM.extab.text.exception_dl (88)
+rtl: section header: 26: offset=29204
+rtl: alloc: new: OBJECT addr=0x13cf10 size=56
+rtl: alloc: new: OBJECT addr=0x13cf70 size=33
+rtl: sect: 26: .rel.ARM.extab.text.exception_dl (24)
+rtl: section header: 27: offset=29244
+rtl: alloc: new: OBJECT addr=0x13cfb8 size=56
+rtl: alloc: new: OBJECT addr=0x13d018 size=29
+rtl: sect: 27: .ARM.exidx.text.exception_dl (8)
+rtl: section header: 28: offset=29284
+rtl: alloc: new: OBJECT addr=0x13d060 size=56
+rtl: alloc: new: OBJECT addr=0x13d0c0 size=33
+rtl: sect: 28: .rel.ARM.exidx.text.exception_dl (16)
+rtl: section header: 29: offset=29324
+rtl: alloc: new: OBJECT addr=0x13d108 size=56
+rtl: alloc: new: OBJECT addr=0x13d168 size=31
+rtl: sect: 29: .rodata._ZTI16dl_test_throw_me (8)
+rtl: section header: 30: offset=29364
+rtl: alloc: new: OBJECT addr=0x13d1b0 size=56
+rtl: alloc: new: OBJECT addr=0x13d210 size=35
+rtl: sect: 30: .rel.rodata._ZTI16dl_test_throw_me (16)
+rtl: section header: 31: offset=29404
+rtl: alloc: new: OBJECT addr=0x13d258 size=56
+rtl: alloc: new: OBJECT addr=0x13d2b8 size=31
+rtl: sect: 31: .rodata._ZTS16dl_test_throw_me (19)
+rtl: section header: 32: offset=29444
+rtl: alloc: new: OBJECT addr=0x13d300 size=56
+rtl: alloc: new: OBJECT addr=0x13d360 size=36
+rtl: sect: 32: .rodata._ZZ12exception_dlE8__func__ (13)
+rtl: section header: 33: offset=29484
+rtl: section header: 34: offset=29524
+rtl: alloc: new: OBJECT addr=0x13d3a8 size=56
+rtl: alloc: new: OBJECT addr=0x13d408 size=16
+rtl: sect: 34: .rel.debug_info (4120)
+rtl: section header: 35: offset=29564
+rtl: section header: 36: offset=29604
+rtl: section header: 37: offset=29644
+rtl: alloc: new: OBJECT addr=0x13d440 size=56
+rtl: alloc: new: OBJECT addr=0x13d4a0 size=19
+rtl: sect: 37: .rel.debug_aranges (40)
+rtl: section header: 38: offset=29684
+rtl: section header: 39: offset=29724
+rtl: alloc: new: OBJECT addr=0x13d4d8 size=56
+rtl: alloc: new: OBJECT addr=0x13d538 size=18
+rtl: sect: 39: .rel.debug_ranges (128)
+rtl: section header: 40: offset=29764
+rtl: section header: 41: offset=29804
+rtl: alloc: new: OBJECT addr=0x13d570 size=56
+rtl: alloc: new: OBJECT addr=0x13d5d0 size=16
+rtl: sect: 41: .rel.debug_line (32)
+rtl: section header: 42: offset=29844
+rtl: section header: 43: offset=29884
+rtl: section header: 44: offset=29924
+rtl: section header: 45: offset=29964
+rtl: alloc: new: OBJECT addr=0x13d608 size=56
+rtl: alloc: new: OBJECT addr=0x13d668 size=17
+rtl: sect: 45: .rel.debug_frame (64)
+rtl: section header: 46: offset=30004
+rtl: unsupported section: 46: type=1879048195 flags=00
+rtl: section header: 47: offset=30044
+rtl: alloc: new: OBJECT addr=0x13d6a0 size=56
+rtl: alloc: new: OBJECT addr=0x13d700 size=10
+rtl: sect: 47: .shstrtab (697)
+rtl: section header: 48: offset=30084
+rtl: alloc: new: OBJECT addr=0x13d730 size=56
+rtl: alloc: new: OBJECT addr=0x13d790 size=8
+rtl: sect: 48: .symtab (1344)
+rtl: section header: 49: offset=30124
+rtl: alloc: new: OBJECT addr=0x13d7c0 size=56
+rtl: alloc: new: OBJECT addr=0x13d820 size=8
+rtl: sect: 49: .strtab (630)
+rtl: alloc: new: READ_EXEC addr=0x13d850 size=422
+rtl: alloc: new: READ addr=0x13da20 size=309
+rtl: alloc: new: READ addr=0x13db80 size=32
+rtl: load sect: text  - b:0x13d850 s:422 a:2
+rtl: load sect: const - b:0x13da20 s:309 a:4
+rtl: load sect: eh    - b:0x13db80 s:32 a:4
+rtl: load sect: data  - b:0x0 s:0 a:0
+rtl: load sect: bss   - b:0x0 s:0 a:0
+rtl: loading: .text._ZN16dl_test_throw_meC2EPKc -> 0x13d850 (l:30 m:0401)
+rtl: loading: .text._ZN16dl_test_throw_meD2Ev -> 0x13d86e (l:22 m:0401)
+rtl: loading: .text._ZNK16dl_test_throw_me4whatEv -> 0x13d884 (l:24 m:0401)
+rtl: loading: .text.exception_dl -> 0x13d89c (l:342 m:0401)
+rtl: loading: .rodata._ZStL19piecewise_construct -> 0x13da20 (l:1 m:0402)
+rtl: loading: .rodata -> 0x13da24 (l:169 m:0402)
+rtl: loading: .ARM.extab.text.exception_dl -> 0x13dad0 (l:88 m:0402)
+rtl: loading: .rodata._ZTI16dl_test_throw_me -> 0x13db28 (l:8 m:0402)
+rtl: loading: .rodata._ZTS16dl_test_throw_me -> 0x13db30 (l:19 m:0402)
+rtl: loading: .rodata._ZZ12exception_dlE8__func__ -> 0x13db44 (l:13 m:0402)
+rtl: loading: .ARM.exidx.text._ZN16dl_test_throw_meC2EPKc -> 0x13db80 (l:8 m:0410)
+rtl: loading: .ARM.exidx.text._ZN16dl_test_throw_meD2Ev -> 0x13db88 (l:8 m:0410)
+rtl: loading: .ARM.exidx.text._ZNK16dl_test_throw_me4whatEv -> 0x13db90 (l:8 m:0410)
+rtl: loading: .ARM.exidx.text.exception_dl -> 0x13db98 (l:8 m:0410)
+rtl: alloc: new: SYMBOL addr=0x13dbc8 size=592
+rtl: alloc: new: SYMBOL addr=0x13de40 size=357
+rtl: sym:add:6  name:11:$d                   bind:0  type:0  val:0x13da20 sect:9 size:0
+rtl: sym:add:7  name:14:_ZStL19piecewise_construct bind:0  type:1  val:0x13da20 sect:9 size:1
+rtl: sym:add:9  name:41:$t                   bind:0  type:0  val:0x13d850 sect:10 size:0
+rtl: sym:add:12 name:11:$d                   bind:0  type:0  val:0x13db80 sect:12 size:0
+rtl: sym:add:14 name:41:$t                   bind:0  type:0  val:0x13d86e sect:14 size:0
+rtl: sym:add:17 name:11:$d                   bind:0  type:0  val:0x13db88 sect:16 size:0
+rtl: sym:add:19 name:41:$t                   bind:0  type:0  val:0x13d884 sect:18 size:0
+rtl: sym:add:22 name:11:$d                   bind:0  type:0  val:0x13db90 sect:20 size:0
+rtl: sym:add:24 name:11:$d                   bind:0  type:0  val:0x13da24 sect:22 size:0
+rtl: sym:add:25 name:44:.LC0                 bind:0  type:0  val:0x13da24 sect:22 size:0
+rtl: sym:add:26 name:49:.LC1                 bind:0  type:0  val:0x13da38 sect:22 size:0
+rtl: sym:add:27 name:54:.LC2                 bind:0  type:0  val:0x13da54 sect:22 size:0
+rtl: sym:add:28 name:59:.LC3                 bind:0  type:0  val:0x13da74 sect:22 size:0
+rtl: sym:add:29 name:64:.LC4                 bind:0  type:0  val:0x13da94 sect:22 size:0
+rtl: sym:add:30 name:69:.LC5                 bind:0  type:0  val:0x13daa8 sect:22 size:0
+rtl: sym:add:31 name:74:.LC6                 bind:0  type:0  val:0x13dab8 sect:22 size:0
+rtl: sym:add:33 name:41:$t                   bind:0  type:0  val:0x13d89c sect:23 size:0
+rtl: sym:add:34 name:79:_ZZ12exception_dlE8__func__ bind:0  type:1  val:0x13db44 sect:32 size:13
+rtl: sym:add:36 name:11:$d                   bind:0  type:0  val:0x13dad0 sect:25 size:0
+rtl: sym:add:38 name:11:$d                   bind:0  type:0  val:0x13db98 sect:27 size:0
+rtl: sym:add:40 name:11:$d                   bind:0  type:0  val:0x13db28 sect:29 size:0
+rtl: sym:add:42 name:11:$d                   bind:0  type:0  val:0x13db30 sect:31 size:0
+rtl: sym:add:44 name:11:$d                   bind:0  type:0  val:0x13db44 sect:32 size:0
+rtl: sym:add:62 name:161:_ZN16dl_test_throw_meC2EPKc bind:2  type:2  val:0x13d851 sect:10 size:30
+rtl: sym:add:63 name:189:_ZN16dl_test_throw_meC1EPKc bind:2  type:2  val:0x13d851 sect:10 size:30
+rtl: sym:add:64 name:217:_ZN16dl_test_throw_meD2Ev bind:2  type:2  val:0x13d86f sect:14 size:22
+rtl: sym:add:65 name:243:_ZN16dl_test_throw_meD1Ev bind:2  type:2  val:0x13d86f sect:14 size:22
+rtl: sym:add:66 name:269:_ZNK16dl_test_throw_me4whatEv bind:2  type:2  val:0x13d885 sect:18 size:24
+rtl: sym:add:67 name:299:exception_dl         bind:1  type:2  val:0x13d89d sect:23 size:342
+rtl: sym:add:75 name:449:_ZTI16dl_test_throw_me bind:2  type:1  val:0x13db28 sect:29 size:8
+rtl: sym:add:83 name:607:_ZTS16dl_test_throw_me bind:2  type:1  val:0x13db30 sect:31 size:19
+rtl: relocation: .rel.ARM.exidx.text._ZN16dl_test_throw_meC2EPKc, syms:.symtab
+rtl: rel: sym:(null)(8)=0013d850 type:42 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7ffffcd0 @ 0x13db80 in /dl-o5.o
+rtl: relocation: .rel.ARM.exidx.text._ZN16dl_test_throw_meD2Ev, syms:.symtab
+rtl: rel: sym:(null)(13)=0013d86e type:42 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7ffffce6 @ 0x13db88 in /dl-o5.o
+rtl: relocation: .rel.ARM.exidx.text._ZNK16dl_test_throw_me4whatEv, syms:.symtab
+rtl: rel: sym:(null)(18)=0013d884 type:42 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7ffffcf4 @ 0x13db90 in /dl-o5.o
 rtl: relocation: .rel.text.exception_dl, syms:.symtab
-rtl: rel: sym:.LC0(10)=001215dc type:47 off:00000006
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x50dcf241 @ 0x1214ee in /dl-o5.o
-rtl: rel: sym:.LC0(10)=001215dc type:48 off:0000000a
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x12f2c0 @ 0x1214f2 in /dl-o5.o
-rtl: rel: sym:puts(35)=0003536d type:10 off:0000000e
-rtl: THM_CALL/JUMP24 0xff39f713 @ 0x1214f6 in /dl-o5.o
-rtl: rel: sym:__cxa_allocate_exception(36)=00001031 type:10 off:00000014
-rtl: THM_CALL/JUMP24 0xfd98f6df @ 0x1214fc in /dl-o5.o
-rtl: rel: sym:.LC1(11)=001215f4 type:47 off:0000001c
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x51f4f241 @ 0x121504 in /dl-o5.o
-rtl: rel: sym:.LC1(11)=001215f4 type:48 off:00000020
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x112f2c0 @ 0x121508 in /dl-o5.o
-rtl: rel: sym:_ZNSt13runtime_errorC1EPKc(37)=000085a9 type:10 off:00000026
-rtl: THM_CALL/JUMP24 0xf84bf6e7 @ 0x12150e in /dl-o5.o
-rtl: rel: sym:_ZNSt13runtime_errorD1Ev(38)=00008505 type:47 off:0000002a
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x5205f248 @ 0x121512 in /dl-o5.o
-rtl: rel: sym:_ZNSt13runtime_errorD1Ev(38)=00008505 type:48 off:0000002e
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x200f2c0 @ 0x121516 in /dl-o5.o
-rtl: rel: sym:_ZTISt13runtime_error(39)=0004b61c type:47 off:00000032
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x611cf24b @ 0x12151a in /dl-o5.o
-rtl: rel: sym:_ZTISt13runtime_error(39)=0004b61c type:48 off:00000036
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x104f2c0 @ 0x12151e in /dl-o5.o
-rtl: rel: sym:__cxa_throw(40)=00001cc5 type:10 off:0000003c
-rtl: THM_CALL/JUMP24 0xfbcef6e0 @ 0x121524 in /dl-o5.o
-rtl: rel: sym:__cxa_free_exception(41)=00001061 type:10 off:00000046
-rtl: THM_CALL/JUMP24 0xfd97f6df @ 0x12152e in /dl-o5.o
-rtl: rel: sym:__cxa_begin_catch(42)=000013a5 type:10 off:0000005c
-rtl: THM_CALL/JUMP24 0xff2ef6df @ 0x121544 in /dl-o5.o
-rtl: rel: sym:(null)(16)=00121674 type:47 off:00000074
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x6174f241 @ 0x12155c in /dl-o5.o
-rtl: rel: sym:(null)(16)=00121674 type:48 off:00000078
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x112f2c0 @ 0x121560 in /dl-o5.o
-rtl: rel: sym:.LC2(12)=00121608 type:47 off:0000007c
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x6008f241 @ 0x121564 in /dl-o5.o
-rtl: rel: sym:.LC2(12)=00121608 type:48 off:00000080
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x12f2c0 @ 0x121568 in /dl-o5.o
-rtl: rel: sym:printf(43)=000351b1 type:10 off:00000084
-rtl: THM_CALL/JUMP24 0xfe20f713 @ 0x12156c in /dl-o5.o
-rtl: rel: sym:__cxa_end_catch(44)=00001429 type:10 off:00000088
-rtl: THM_CALL/JUMP24 0xff5af6df @ 0x121570 in /dl-o5.o
-rtl: rel: sym:__cxa_begin_catch(42)=000013a5 type:10 off:00000092
-rtl: THM_CALL/JUMP24 0xff13f6df @ 0x12157a in /dl-o5.o
-rtl: rel: sym:(null)(16)=00121674 type:47 off:00000096
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x6174f241 @ 0x12157e in /dl-o5.o
-rtl: rel: sym:(null)(16)=00121674 type:48 off:0000009a
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x112f2c0 @ 0x121582 in /dl-o5.o
-rtl: rel: sym:.LC3(13)=00121618 type:47 off:0000009e
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x6018f241 @ 0x121586 in /dl-o5.o
-rtl: rel: sym:.LC3(13)=00121618 type:48 off:000000a2
-rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x12f2c0 @ 0x12158a in /dl-o5.o
-rtl: rel: sym:printf(43)=000351b1 type:10 off:000000a6
-rtl: THM_CALL/JUMP24 0xfe0ff713 @ 0x12158e in /dl-o5.o
-rtl: rel: sym:__cxa_end_catch(44)=00001429 type:10 off:000000aa
-rtl: THM_CALL/JUMP24 0xff49f6df @ 0x121592 in /dl-o5.o
-rtl: rel: sym:__cxa_end_catch(44)=00001429 type:10 off:000000b0
-rtl: THM_CALL/JUMP24 0xff46f6df @ 0x121598 in /dl-o5.o
-rtl: rel: sym:__cxa_end_cleanup(45)=000010b5 type:10 off:000000b4
-rtl: THM_CALL/JUMP24 0xfd8af6df @ 0x12159c in /dl-o5.o
-rtl: rel: sym:__cxa_end_catch(44)=00001429 type:10 off:000000b8
-rtl: THM_CALL/JUMP24 0xff42f6df @ 0x1215a0 in /dl-o5.o
-rtl: rel: sym:__cxa_end_cleanup(45)=000010b5 type:10 off:000000bc
-rtl: THM_CALL/JUMP24 0xfd86f6df @ 0x1215a4 in /dl-o5.o
+rtl: rel: sym:.LC0(25)=0013da24 type:47 off:0000000a
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x2024f64d @ 0x13d8a6 in /dl-o5.o
+rtl: rel: sym:.LC0(25)=0013da24 type:48 off:0000000e
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d8aa in /dl-o5.o
+rtl: rel: sym:puts(69)=00036f6d type:10 off:00000012
+rtl: THM_CALL/JUMP24 0xfb5df6f9 @ 0x13d8ae in /dl-o5.o
+rtl: rel: sym:.LC1(26)=0013da38 type:47 off:00000016
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x2038f64d @ 0x13d8b2 in /dl-o5.o
+rtl: rel: sym:.LC1(26)=0013da38 type:48 off:0000001a
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d8b6 in /dl-o5.o
+rtl: rel: sym:puts(69)=00036f6d type:10 off:0000001e
+rtl: THM_CALL/JUMP24 0xfb57f6f9 @ 0x13d8ba in /dl-o5.o
+rtl: rel: sym:__cxa_allocate_exception(70)=000011e9 type:10 off:0000002a
+rtl: THM_CALL/JUMP24 0xfc8ff6c3 @ 0x13d8c6 in /dl-o5.o
+rtl: rel: sym:.LC2(27)=0013da54 type:47 off:00000032
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x2154f64d @ 0x13d8ce in /dl-o5.o
+rtl: rel: sym:.LC2(27)=0013da54 type:48 off:00000036
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d8d2 in /dl-o5.o
+rtl: rel: sym:_ZNSt13runtime_errorC1EPKc(71)=00008c0d type:10 off:0000003c
+rtl: THM_CALL/JUMP24 0xf998f6cb @ 0x13d8d8 in /dl-o5.o
+rtl: rel: sym:_ZNSt13runtime_errorD1Ev(72)=00008b69 type:47 off:00000040
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x3269f648 @ 0x13d8dc in /dl-o5.o
+rtl: rel: sym:_ZNSt13runtime_errorD1Ev(72)=00008b69 type:48 off:00000044
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x200f2c0 @ 0x13d8e0 in /dl-o5.o
+rtl: rel: sym:_ZTISt13runtime_error(73)=0004fd7c type:47 off:00000048
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x517cf64f @ 0x13d8e4 in /dl-o5.o
+rtl: rel: sym:_ZTISt13runtime_error(73)=0004fd7c type:48 off:0000004c
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x104f2c0 @ 0x13d8e8 in /dl-o5.o
+rtl: rel: sym:__cxa_throw(74)=00001e7d type:10 off:00000052
+rtl: THM_CALL/JUMP24 0xfac5f6c4 @ 0x13d8ee in /dl-o5.o
+rtl: rel: sym:__cxa_allocate_exception(70)=000011e9 type:10 off:00000058
+rtl: THM_CALL/JUMP24 0xfc78f6c3 @ 0x13d8f4 in /dl-o5.o
+rtl: rel: sym:.LC3(28)=0013da74 type:47 off:00000060
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x2174f64d @ 0x13d8fc in /dl-o5.o
+rtl: rel: sym:.LC3(28)=0013da74 type:48 off:00000064
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d900 in /dl-o5.o
+rtl: rel: sym:(null)(63)=0013d851 type:10 off:0000006a
+rtl: THM_CALL/JUMP24 0xffa3f7ff @ 0x13d906 in /dl-o5.o
+rtl: rel: sym:(null)(65)=0013d86f type:47 off:0000006e
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x26ff64d @ 0x13d90a in /dl-o5.o
+rtl: rel: sym:(null)(65)=0013d86f type:48 off:00000072
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x213f2c0 @ 0x13d90e in /dl-o5.o
+rtl: rel: sym:(null)(75)=0013db28 type:47 off:00000076
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x3128f64d @ 0x13d912 in /dl-o5.o
+rtl: rel: sym:(null)(75)=0013db28 type:48 off:0000007a
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d916 in /dl-o5.o
+rtl: rel: sym:__cxa_throw(74)=00001e7d type:10 off:00000080
+rtl: THM_CALL/JUMP24 0xfaaef6c4 @ 0x13d91c in /dl-o5.o
+rtl: rel: sym:.LC4(29)=0013da94 type:47 off:00000084
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x2094f64d @ 0x13d920 in /dl-o5.o
+rtl: rel: sym:.LC4(29)=0013da94 type:48 off:00000088
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d924 in /dl-o5.o
+rtl: rel: sym:puts(69)=00036f6d type:10 off:0000008c
+rtl: THM_CALL/JUMP24 0xfb20f6f9 @ 0x13d928 in /dl-o5.o
+rtl: rel: sym:__cxa_free_exception(76)=00001219 type:10 off:00000098
+rtl: THM_CALL/JUMP24 0xfc70f6c3 @ 0x13d934 in /dl-o5.o
+rtl: rel: sym:__cxa_begin_catch(77)=0000155d type:10 off:000000b4
+rtl: THM_CALL/JUMP24 0xfe04f6c3 @ 0x13d950 in /dl-o5.o
+rtl: rel: sym:(null)(66)=0013d885 type:10 off:000000be
+rtl: THM_CALL/JUMP24 0xff93f7ff @ 0x13d95a in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:47 off:000000c6
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x3144f64d @ 0x13d962 in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:48 off:000000ca
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d966 in /dl-o5.o
+rtl: rel: sym:.LC5(30)=0013daa8 type:47 off:000000ce
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x20a8f64d @ 0x13d96a in /dl-o5.o
+rtl: rel: sym:.LC5(30)=0013daa8 type:48 off:000000d2
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d96e in /dl-o5.o
+rtl: rel: sym:printf(78)=00036db1 type:10 off:000000d6
+rtl: THM_CALL/JUMP24 0xfa1df6f9 @ 0x13d972 in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:000000da
+rtl: THM_CALL/JUMP24 0xfe33f6c3 @ 0x13d976 in /dl-o5.o
+rtl: rel: sym:__cxa_begin_catch(77)=0000155d type:10 off:000000e4
+rtl: THM_CALL/JUMP24 0xfdecf6c3 @ 0x13d980 in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:47 off:000000fc
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x3144f64d @ 0x13d998 in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:48 off:00000100
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d99c in /dl-o5.o
+rtl: rel: sym:.LC5(30)=0013daa8 type:47 off:00000104
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x20a8f64d @ 0x13d9a0 in /dl-o5.o
+rtl: rel: sym:.LC5(30)=0013daa8 type:48 off:00000108
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d9a4 in /dl-o5.o
+rtl: rel: sym:printf(78)=00036db1 type:10 off:0000010c
+rtl: THM_CALL/JUMP24 0xfa02f6f9 @ 0x13d9a8 in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:00000110
+rtl: THM_CALL/JUMP24 0xfe18f6c3 @ 0x13d9ac in /dl-o5.o
+rtl: rel: sym:__cxa_begin_catch(77)=0000155d type:10 off:0000011a
+rtl: THM_CALL/JUMP24 0xfdd1f6c3 @ 0x13d9b6 in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:47 off:0000011e
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x3144f64d @ 0x13d9ba in /dl-o5.o
+rtl: rel: sym:(null)(34)=0013db44 type:48 off:00000122
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x113f2c0 @ 0x13d9be in /dl-o5.o
+rtl: rel: sym:.LC6(31)=0013dab8 type:47 off:00000126
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x20b8f64d @ 0x13d9c2 in /dl-o5.o
+rtl: rel: sym:.LC6(31)=0013dab8 type:48 off:0000012a
+rtl: THM_MOVT_ABS/THM_MOVW_ABS_NC 0x13f2c0 @ 0x13d9c6 in /dl-o5.o
+rtl: rel: sym:printf(78)=00036db1 type:10 off:0000012e
+rtl: THM_CALL/JUMP24 0xf9f1f6f9 @ 0x13d9ca in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:00000132
+rtl: THM_CALL/JUMP24 0xfe07f6c3 @ 0x13d9ce in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:00000138
+rtl: THM_CALL/JUMP24 0xfe04f6c3 @ 0x13d9d4 in /dl-o5.o
+rtl: rel: sym:__cxa_end_cleanup(80)=0000126d type:10 off:0000013c
+rtl: THM_CALL/JUMP24 0xfc48f6c3 @ 0x13d9d8 in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:00000140
+rtl: THM_CALL/JUMP24 0xfe00f6c3 @ 0x13d9dc in /dl-o5.o
+rtl: rel: sym:__cxa_end_cleanup(80)=0000126d type:10 off:00000144
+rtl: THM_CALL/JUMP24 0xfc44f6c3 @ 0x13d9e0 in /dl-o5.o
+rtl: rel: sym:__cxa_end_catch(79)=000015e1 type:10 off:00000148
+rtl: THM_CALL/JUMP24 0xfdfcf6c3 @ 0x13d9e4 in /dl-o5.o
+rtl: rel: sym:__cxa_end_cleanup(80)=0000126d type:10 off:0000014c
+rtl: THM_CALL/JUMP24 0xfc40f6c3 @ 0x13d9e8 in /dl-o5.o
 rtl: relocation: .rel.ARM.extab.text.exception_dl, syms:.symtab
-rtl: rel: sym:__gxx_personality_v0(34)=00001745 type:42 off:00000000
-rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0xffee0115 @ 0x121630 in /dl-o5.ortl: rel: sym:_ZTISt9exception(46)=0004a540 type:41 off:0000003c
-rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x4a540 @ 0x12166c in /dl-o5.ortl: alloc: del: SYMBOL addr=0x1216d8
-rtl: alloc: new: OBJECT addr=0x121880 size=132
+rtl: rel: sym:__gxx_personality_v0(68)=000018fd type:42 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7fec3e2d @ 0x13dad0 in /dl-o5.o
+rtl: rel: sym:_ZTISt9exception(81)=0004ec10 type:41 off:00000050
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0xfff110f0 @ 0x13db20 in /dl-o5.o
+rtl: rel: sym:(null)(75)=0013db28 type:41 off:00000054
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x4 @ 0x13db24 in /dl-o5.o
+rtl: relocation: .rel.ARM.exidx.text.exception_dl, syms:.symtab
+rtl: rel: sym:(null)(32)=0013d89c type:42 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7ffffd04 @ 0x13db98 in /dl-o5.o
+rtl: rel: sym:(null)(35)=0013dad0 type:42 off:00000004
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x7fffff34 @ 0x13db9c in /dl-o5.o
+rtl: relocation: .rel.rodata._ZTI16dl_test_throw_me, syms:.symtab
+rtl: rel: sym:_ZTVN10__cxxabiv117__class_type_infoE(82)=0004ebb4 type:2 off:00000000
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x4ebbc @ 0x13db28 in /dl-o5.o
+rtl: rel: sym:(null)(83)=0013db30 type:2 off:00000004
+rtl: REL32/ABS32/GLOB_DAT/PREL31/TARGET2 0x13db30 @ 0x13db2c in /dl-o5.o
+rtl: alloc: del: SYMBOL addr=0x13dbc8
+rtl: alloc: new: OBJECT addr=0x13dfd0 size=212
 rtl: linkmap_add
 rtl: unresolv: global resolve
-dlopen: 
-dlsym: 
-exception_base called
-exception_dl: throwing
-terminate called after throwing an instance of 'std::runtime_error'
-  what():  exception_dl throw
+exception_base: begin
+exception_base: caught: eb: throw std::runtime_error
+exception_base: end
+exception_dl: begin
+exception_dl: throwing...
+exception_dl: caught: throw std::runtime_error object
+exception_dl: end
+rtl: unloading '/dl-o5.o'
+rtl: alloc: del: READ_WRITE addr=0x0
+rtl: alloc: del: READ_WRITE addr=0x0
+rtl: alloc: del: READ addr=0x13db80
+rtl: alloc: del: READ addr=0x13da20
+rtl: alloc: del: READ_EXEC addr=0x13d850
+rtl: alloc: del: SYMBOL addr=0x13de40
+rtl: alloc: del: OBJECT addr=0x13c560
+rtl: alloc: del: OBJECT addr=0x13c590
+rtl: alloc: del: OBJECT addr=0x13dfd0
+rtl: alloc: del: OBJECT addr=0x13c4a8
+*** END OF TEST libdl (RTL) 5 ***
diff --git a/testsuites/libtests/dl05/init.c b/testsuites/libtests/dl05/init.c
index f6e0c20..9c7f006 100644
--- a/testsuites/libtests/dl05/init.c
+++ b/testsuites/libtests/dl05/init.c
@@ -69,9 +69,13 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_MAXIMUM_TASKS 1
 
-#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (8U * 1024U)
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (32U * 1024U)
 
-#define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
+#define CONFIGURE_EXTRA_TASK_STACKS (64 * 1024)
+
+#define CONFIGURE_MAXIMUM_POSIX_KEYS 2
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
 
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 




More information about the vc mailing list