|
|
@@ -0,0 +1,32 @@
|
|
|
+--- a/ldso/include/dl-elf.h
|
|
|
++++ b/ldso/include/dl-elf.h
|
|
|
+@@ -42,6 +42,10 @@
|
|
|
+ extern int _dl_fixup(struct dyn_elf *rpnt, int flag);
|
|
|
+ extern void _dl_protect_relro (struct elf_resolve *l);
|
|
|
+
|
|
|
++#ifndef DL_LOADADDR_ISSET(_loadaddr)
|
|
|
++#define DL_LOADADDR_ISSET(_loadaddr) ((_loadaddr) != 0)
|
|
|
++#endif
|
|
|
++
|
|
|
+ /*
|
|
|
+ * Bitsize related settings for things ElfW()
|
|
|
+ * does not handle already
|
|
|
+@@ -163,7 +167,7 @@
|
|
|
+ dynamic_info[tag] = (unsigned long) DL_RELOC_ADDR(load_off, dynamic_info[tag]); \
|
|
|
+ } while (0)
|
|
|
+ /* Don't adjust .dynamic unnecessarily. */
|
|
|
+- if (load_off != 0) {
|
|
|
++ if (DL_LOADADDR_ISSET(load_off)) {
|
|
|
+ ADJUST_DYN_INFO(DT_HASH, load_off);
|
|
|
+ ADJUST_DYN_INFO(DT_PLTGOT, load_off);
|
|
|
+ ADJUST_DYN_INFO(DT_STRTAB, load_off);
|
|
|
+--- a/ldso/ldso/ubicom32/dl-sysdep.h
|
|
|
++++ b/ldso/ldso/ubicom32/dl-sysdep.h
|
|
|
+@@ -101,6 +101,7 @@
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+ #define DL_LOADADDR_TYPE struct elf32_fdpic_loadaddr
|
|
|
++#define DL_LOADADDR_ISSET(_loadaddr) ((_loadaddr).map != NULL)
|
|
|
+
|
|
|
+ #define DL_RELOC_ADDR(LOADADDR, ADDR) \
|
|
|
+ ((ElfW(Addr))__reloc_pointer ((void*)(ADDR), (LOADADDR).map))
|