summaryrefslogtreecommitdiffstats
path: root/cpukit/libdl/rtl-mdreloc-lm32.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2019-01-15 17:47:41 +1100
committerChris Johns <chrisj@rtems.org>2019-02-09 10:06:34 +1100
commitd8c70ba65b13cd023b50b8aed5d91e455017cdd5 (patch)
treef78c3441ef74a7315ef4f7850bd27631bf0d2502 /cpukit/libdl/rtl-mdreloc-lm32.c
parentlibdl: Fix the support for constructors and desctructors. (diff)
downloadrtems-d8c70ba65b13cd023b50b8aed5d91e455017cdd5.tar.bz2
libdl: Add support for trampolines
- Trampolines or fixups for veneers provide long jump support for instruciton sets that implement short relative address branches. The linker provides trampolines when creating a static image. This patch adds trampoline support to libdl and the ARM architecture. - The dl09 test requires enough memory so modules are outside the relative branch instruction ranges for the architecture. Updates #3685
Diffstat (limited to 'cpukit/libdl/rtl-mdreloc-lm32.c')
-rw-r--r--cpukit/libdl/rtl-mdreloc-lm32.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/cpukit/libdl/rtl-mdreloc-lm32.c b/cpukit/libdl/rtl-mdreloc-lm32.c
index ad59ec2e09..cf64ea8fb3 100644
--- a/cpukit/libdl/rtl-mdreloc-lm32.c
+++ b/cpukit/libdl/rtl-mdreloc-lm32.c
@@ -25,8 +25,34 @@ rtems_rtl_elf_rel_resolve_sym (Elf_Word type)
return true;
}
+size_t
+rtems_rtl_elf_relocate_tramp_max_size (void)
+{
+ /*
+ * Disable by returning 0.
+ */
+ return 0;
+}
+
+bool
+rtems_rtl_elf_relocate_rela_tramp (rtems_rtl_obj* obj,
+ const Elf_Rela* rela,
+ const rtems_rtl_obj_sect* sect,
+ const char* symname,
+ const Elf_Byte syminfo,
+ const Elf_Word symvalue)
+{
+ (void) obj;
+ (void) rela;
+ (void) sect;
+ (void) symname;
+ (void) syminfo;
+ (void) symvalue;
+ return true;
+}
+
bool
-rtems_rtl_elf_relocate_rela (const rtems_rtl_obj* obj,
+rtems_rtl_elf_relocate_rela (rtems_rtl_obj* obj,
const Elf_Rela* rela,
const rtems_rtl_obj_sect* sect,
const char* symname,
@@ -117,13 +143,37 @@ rtems_rtl_elf_relocate_rela (const rtems_rtl_obj* obj,
}
bool
-rtems_rtl_elf_relocate_rel (const rtems_rtl_obj* obj,
+rtems_rtl_elf_relocate_rel_tramp (rtems_rtl_obj* obj,
+ const Elf_Rel* rel,
+ const rtems_rtl_obj_sect* sect,
+ const char* symname,
+ const Elf_Byte syminfo,
+ const Elf_Word symvalue)
+{
+ (void) obj;
+ (void) rela;
+ (void) sect;
+ (void) symname;
+ (void) syminfo;
+ (void) symvalue;
+ rtems_rtl_set_error (EINVAL, "rel type record not supported");
+ return false;
+}
+
+bool
+rtems_rtl_elf_relocate_rel (rtems_rtl_obj* obj,
const Elf_Rel* rel,
const rtems_rtl_obj_sect* sect,
const char* symname,
const Elf_Byte syminfo,
const Elf_Word symvalue)
{
+ (void) obj;
+ (void) rela;
+ (void) sect;
+ (void) symname;
+ (void) syminfo;
+ (void) symvalue;
rtems_rtl_set_error (EINVAL, "rela type record not supported");
return false;
}