[rtems commit] libdl/arm: Fix ARM mode trampoline parsing of relocs
Chris Johns
chrisj at rtems.org
Sat Jul 27 23:17:08 UTC 2019
Module: rtems
Branch: master
Commit: 5a678de90ccbce64ff7c39a6a660019494f2a770
Changeset: http://git.rtems.org/rtems/commit/?id=5a678de90ccbce64ff7c39a6a660019494f2a770
Author: Chris Johns <chrisj at rtems.org>
Date: Sun Jul 28 09:12:53 2019 +1000
libdl/arm: Fix ARM mode trampoline parsing of relocs
- No need to dump globals syms in test dl01 when tracing
Closes #3775
---
cpukit/libdl/rtl-mdreloc-arm.c | 32 ++++++++++++++++----------------
testsuites/libtests/dl01/dl-load.c | 1 -
2 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/cpukit/libdl/rtl-mdreloc-arm.c b/cpukit/libdl/rtl-mdreloc-arm.c
index 4d5a245..9e5d66e 100644
--- a/cpukit/libdl/rtl-mdreloc-arm.c
+++ b/cpukit/libdl/rtl-mdreloc-arm.c
@@ -279,32 +279,32 @@ rtems_rtl_elf_reloc_rel (rtems_rtl_obj* obj,
case R_TYPE(V4BX):
/* Miscellaneous, ignore */
if (!parsing && rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC)) {
- printf ("rtl: V4BX %p @ %p in %s\n",
- (void *)*where, where, rtems_rtl_obj_oname (obj));
+ printf ("rtl: V4BX @ %p in %s\n",
+ where, rtems_rtl_obj_oname (obj));
}
break;
case R_TYPE(MOVT_ABS):
case R_TYPE(MOVW_ABS_NC):
- insn = *where;
+ if (!parsing) {
+ insn = *where;
- addend = ((insn >> 4) & 0xf000) | (insn & 0x0fff);
- if (addend & 0x8000)
- addend |= 0xffff0000;
+ addend = ((insn >> 4) & 0xf000) | (insn & 0x0fff);
+ if (addend & 0x8000)
+ addend |= 0xffff0000;
- tmp = symvalue + addend;
+ tmp = symvalue + addend;
- if (ELF_R_TYPE(rel->r_info) == R_TYPE(MOVW_ABS_NC))
- tmp &= 0xffff;
- else {
- tmp = (Elf_Sword)tmp >> 16;
- if (((Elf_Sword)tmp > 0x7fff) || ((Elf_Sword)tmp < -0x8000)) {
- printf("MOVT_ABS Overflow\n");
- return rtems_rtl_elf_rel_failure;
+ if (ELF_R_TYPE(rel->r_info) == R_TYPE(MOVW_ABS_NC))
+ tmp &= 0xffff;
+ else {
+ tmp = (Elf_Sword)tmp >> 16;
+ if (((Elf_Sword)tmp > 0x7fff) || ((Elf_Sword)tmp < -0x8000)) {
+ printf("MOVT_ABS Overflow\n");
+ return rtems_rtl_elf_rel_failure;
+ }
}
- }
- if (!parsing) {
*where = (insn & 0xfff0f000) | ((tmp & 0xf000) << 4) | (tmp & 0xfff);
if (rtems_rtl_trace (RTEMS_RTL_TRACE_RELOC))
diff --git a/testsuites/libtests/dl01/dl-load.c b/testsuites/libtests/dl01/dl-load.c
index f807d2a..d93550d 100644
--- a/testsuites/libtests/dl01/dl-load.c
+++ b/testsuites/libtests/dl01/dl-load.c
@@ -26,7 +26,6 @@
RTEMS_RTL_TRACE_ALLOCATOR | \
RTEMS_RTL_TRACE_UNRESOLVED | \
RTEMS_RTL_TRACE_ARCHIVES | \
- RTEMS_RTL_TRACE_GLOBAL_SYM | \
RTEMS_RTL_TRACE_DEPENDENCY)
#define DL_DEBUG_TRACE DEBUG_TRACE /* RTEMS_RTL_TRACE_ALL */
#define DL_RTL_CMDS 1
More information about the vc
mailing list