summaryrefslogtreecommitdiff
path: root/ldso/ldso/microblaze/dl-sysdep.h
diff options
context:
space:
mode:
Diffstat (limited to 'ldso/ldso/microblaze/dl-sysdep.h')
-rw-r--r--ldso/ldso/microblaze/dl-sysdep.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/ldso/ldso/microblaze/dl-sysdep.h b/ldso/ldso/microblaze/dl-sysdep.h
index b293d27cc..43200271e 100644
--- a/ldso/ldso/microblaze/dl-sysdep.h
+++ b/ldso/ldso/microblaze/dl-sysdep.h
@@ -1,5 +1,3 @@
-/* elf reloc code for the microblaze platform, based on glibc 2.3.6, dl-machine.h */
-
/*
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -15,37 +13,41 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-/* Use reloca */
#define ELF_USES_RELOCA
#include <elf.h>
-
/* Initialise the GOT */
-#define INIT_GOT(GOT_BASE,MODULE) \
-do { \
- GOT_BASE[2] = (unsigned long) _dl_linux_resolve; \
- GOT_BASE[1] = (unsigned long) MODULE; \
+#define INIT_GOT(GOT_BASE,MODULE) \
+do { \
+ GOT_BASE[1] = (unsigned long) MODULE; \
+ GOT_BASE[2] = (unsigned long) _dl_linux_resolve; \
} while(0)
/* Here we define the magic numbers that this dynamic loader should accept */
-
#define MAGIC1 EM_MICROBLAZE
#undef MAGIC2
/* Used for error messages */
#define ELF_TARGET "microblaze"
+/* Need bootstrap relocations */
+#define ARCH_NEEDS_BOOTSTRAP_RELOCS
+
struct elf_resolve;
unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
#define elf_machine_type_class(type) \
- (((type) == R_MICROBLAZE_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT \
+ (((type) == R_MICROBLAZE_JUMP_SLOT || \
+ (type) == R_MICROBLAZE_TLSDTPREL32 || \
+ (type) == R_MICROBLAZE_TLSDTPMOD32 || \
+ (type) == R_MICROBLAZE_TLSTPREL32) \
+ * ELF_RTYPE_CLASS_PLT \
| ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
first element of the GOT. This must be inlined in a function which
uses global data. */
-static inline Elf32_Addr
+static __always_inline Elf32_Addr __attribute__ ((unused))
elf_machine_dynamic (void)
{
Elf32_Addr got_entry_0;
@@ -56,7 +58,6 @@ elf_machine_dynamic (void)
return got_entry_0;
}
-
/* Return the run-time load address of the shared object. */
static inline Elf32_Addr
elf_machine_load_address (void)
@@ -64,6 +65,7 @@ elf_machine_load_address (void)
/* Compute the difference between the runtime address of _DYNAMIC as seen
by a GOTOFF reference, and the link-time address found in the special
unrelocated first GOT entry. */
+
Elf32_Addr dyn;
__asm__ __volatile__ (
"addik %0,r20,_DYNAMIC@GOTOFF"
@@ -72,8 +74,6 @@ elf_machine_load_address (void)
return dyn - elf_machine_dynamic ();
}
-
-
static __always_inline void
elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
Elf32_Word relative_count)