Add support uClibc++ excpetions. This involves additional handling for relative relation types, additional support for unwinding, as well as additional changes. The culmination of a big effort fromo Leo Aloe3132

This commit is contained in:
Gregory Nutt
2015-06-01 14:16:18 -06:00
parent 482d82c20e
commit 6068820bf3
9 changed files with 283 additions and 0 deletions
+15
View File
@@ -245,6 +245,9 @@ static inline int elf_loadfile(FAR struct elf_loadinfo_s *loadinfo)
int elf_load(FAR struct elf_loadinfo_s *loadinfo)
{
size_t heapsize;
#ifdef CONFIG_UCLIBCXX_EXCEPTION
int exidx;
#endif
int ret;
bvdbg("loadinfo: %p\n", loadinfo);
@@ -328,6 +331,18 @@ int elf_load(FAR struct elf_loadinfo_s *loadinfo)
}
#endif
#ifdef CONFIG_UCLIBCXX_EXCEPTION
exidx = elf_findsection(loadinfo, CONFIG_ELF_EXIDX_SECTNAME);
if (exidx < 0)
{
bvdbg("elf_findsection: Exception Index section not found: %d\n", exidx);
}
else
{
up_init_exidx(loadinfo->shdr[exidx].sh_addr, loadinfo->shdr[exidx].sh_size);
}
#endif
#ifdef CONFIG_ARCH_ADDRENV
/* Restore the original address environment */