[PATCH] ldso - removing reloc type check from resolver

olsajiri at gmail.com olsajiri at gmail.com
Tue Jan 27 19:11:01 UTC 2009


Hi,

removing check for the relocation type check in the resolver,
from all archs, as decided in the previous email.
I tested it for i386, so no real test really.

regards,
jirka


Signed-off-by: Jiri Olsa <olsajiri at gmail.com>

Index: ldso/ldso/arm/elfinterp.c
===================================================================
--- ldso/ldso/arm/elfinterp.c	(revision 25081)
+++ ldso/ldso/arm/elfinterp.c	(working copy)
@@ -44,7 +44,6 @@
 
 unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	char *symname;
@@ -58,19 +57,12 @@
 	rel_addr = (ELF_RELOC *) tpnt->dynamic_info[DT_JMPREL];
 
 	this_reloc = rel_addr + reloc_entry;
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *) tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *) tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_ARM_JUMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-			_dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of jump instruction to fix up */
 	instr_addr = ((unsigned long) this_reloc->r_offset +
 		(unsigned long) tpnt->loadaddr);
Index: ldso/ldso/powerpc/elfinterp.c
===================================================================
--- ldso/ldso/powerpc/elfinterp.c	(revision 25081)
+++ ldso/ldso/powerpc/elfinterp.c	(working copy)
@@ -127,13 +127,6 @@
 	debug_sym(symtab,strtab,symtab_index);
 	debug_reloc(symtab,strtab,this_reloc);
 
-#if defined (__SUPPORT_LD_DEBUG__)
-	if (unlikely(ELF32_R_TYPE(this_reloc->r_info) != R_PPC_JMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocation\n", _dl_progname);
-		_dl_exit(1);
-	}
-#endif
-
 	/* Address of dump instruction to fix up */
 	reloc_addr = (Elf32_Addr *) (tpnt->loadaddr + this_reloc->r_offset);
 
Index: ldso/ldso/sh64/elfinterp.c
===================================================================
--- ldso/ldso/sh64/elfinterp.c	(revision 25081)
+++ ldso/ldso/sh64/elfinterp.c	(working copy)
@@ -47,7 +47,6 @@
 
 unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -61,19 +60,12 @@
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_SH_JMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump reloc\n",
-			    _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of jump instruction to fix up */
 	instr_addr = ((unsigned long)this_reloc->r_offset +
 			(unsigned long)tpnt->loadaddr);
Index: ldso/ldso/m68k/elfinterp.c
===================================================================
--- ldso/ldso/m68k/elfinterp.c	(revision 25081)
+++ ldso/ldso/m68k/elfinterp.c	(working copy)
@@ -47,7 +47,6 @@
 unsigned long
 _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	ElfW(Sym) *symtab;
@@ -60,19 +59,12 @@
 
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 	this_reloc = (ELF_RELOC *)(rel_addr + reloc_entry);
-	reloc_type = ELF_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF_R_SYM(this_reloc->r_info);
 
 	symtab = (ElfW(Sym) *)tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_68K_JMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-		            _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of the jump instruction to fix up. */
 	instr_addr = (this_reloc->r_offset + tpnt->loadaddr);
 	got_addr = (char **)instr_addr;
Index: ldso/ldso/i386/elfinterp.c
===================================================================
--- ldso/ldso/i386/elfinterp.c	(revision 25081)
+++ ldso/ldso/i386/elfinterp.c	(working copy)
@@ -47,7 +47,6 @@
 unsigned long
 _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -60,7 +59,6 @@
 
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
Index: ldso/ldso/frv/elfinterp.c
===================================================================
--- ldso/ldso/frv/elfinterp.c	(revision 25081)
+++ ldso/ldso/frv/elfinterp.c	(working copy)
@@ -26,7 +26,6 @@
 struct funcdesc_value volatile attribute_hidden *
 _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -42,7 +41,6 @@
 				  tpnt->loadaddr);
 
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t)
@@ -51,12 +49,6 @@
 	strtab = DL_RELOC_ADDR (tpnt->dynamic_info[DT_STRTAB], tpnt->loadaddr);
 	symname= strtab + symtab[symtab_index].st_name;
 
-	if (reloc_type != R_FRV_FUNCDESC_VALUE) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-				_dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of GOT entry fix up */
 	got_entry = (struct funcdesc_value *)
 	  DL_RELOC_ADDR (this_reloc->r_offset, tpnt->loadaddr);
Index: ldso/ldso/x86_64/elfinterp.c
===================================================================
--- ldso/ldso/x86_64/elfinterp.c	(revision 25081)
+++ ldso/ldso/x86_64/elfinterp.c	(working copy)
@@ -47,7 +47,6 @@
 unsigned long
 _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	ElfW(Sym) *symtab;
@@ -60,19 +59,12 @@
 
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 	this_reloc = (ELF_RELOC *)(rel_addr + reloc_entry);
-	reloc_type = ELF_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF_R_SYM(this_reloc->r_info);
 
 	symtab = (ElfW(Sym) *)tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_X86_64_JUMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-		            _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of the jump instruction to fix up. */
 	instr_addr = (this_reloc->r_offset + tpnt->loadaddr);
 	got_addr = (char **)instr_addr;
Index: ldso/ldso/cris/elfinterp.c
===================================================================
--- ldso/ldso/cris/elfinterp.c	(revision 25081)
+++ ldso/ldso/cris/elfinterp.c	(working copy)
@@ -41,7 +41,6 @@
 unsigned long
 _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	int symtab_index;
 	char *strtab;
 	char *symname;
@@ -55,19 +54,12 @@
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_CRIS_JUMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-			    _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of the jump instruction to fix up. */
 	instr_addr = ((unsigned long)this_reloc->r_offset +
 		      (unsigned long)tpnt->loadaddr);
Index: ldso/ldso/xtensa/elfinterp.c
===================================================================
--- ldso/ldso/xtensa/elfinterp.c	(revision 25081)
+++ ldso/ldso/xtensa/elfinterp.c	(working copy)
@@ -35,7 +35,6 @@
 unsigned long
 _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -47,19 +46,12 @@
 
 	rel_addr = (char *) tpnt->dynamic_info[DT_JMPREL];
 	this_reloc = (ELF_RELOC *) (rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE (this_reloc->r_info);
 	symtab_index = ELF32_R_SYM (this_reloc->r_info);
 
 	symtab = (Elf32_Sym *) tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *) tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely (reloc_type != R_XTENSA_JMP_SLOT)) {
-		_dl_dprintf (2, "%s: Incorrect relocation type in jump relocations\n",
-					 _dl_progname);
-		_dl_exit (1);
-	}
-
 	/* Address of the literal to fix up.  */
 	got_addr = (char **) (this_reloc->r_offset + tpnt->loadaddr);
 
Index: ldso/ldso/sparc/elfinterp.c
===================================================================
--- ldso/ldso/sparc/elfinterp.c	(revision 25081)
+++ ldso/ldso/sparc/elfinterp.c	(working copy)
@@ -52,7 +52,6 @@
 unsigned long
 _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	ElfW(Sym) *symtab;
@@ -70,19 +69,12 @@
 	reloc_entry = (reloc_entry >> 10) - 0xc;
 
 	this_reloc = (ELF_RELOC *)(rel_addr + reloc_entry);
-	reloc_type = ELF_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF_R_SYM(this_reloc->r_info);
 
 	symtab = (ElfW(Sym) *)tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_SPARC_JMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-			          _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of the jump instruction to fix up. */
 	instr_addr = (this_reloc->r_offset + tpnt->loadaddr);
 	got_addr = (char **)instr_addr;
Index: ldso/ldso/mips/elfinterp.c
===================================================================
--- ldso/ldso/mips/elfinterp.c	(revision 25081)
+++ ldso/ldso/mips/elfinterp.c	(working copy)
@@ -87,7 +87,6 @@
 unsigned long
 __dl_runtime_pltresolve(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -100,7 +99,6 @@
 
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB];
Index: ldso/ldso/sh/elfinterp.c
===================================================================
--- ldso/ldso/sh/elfinterp.c	(revision 25081)
+++ ldso/ldso/sh/elfinterp.c	(working copy)
@@ -45,7 +45,6 @@
 
 unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	Elf32_Sym *symtab;
@@ -59,19 +58,12 @@
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF32_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF32_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *)(intptr_t) tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
 	symname = strtab + symtab[symtab_index].st_name;
 
-	if (unlikely(reloc_type != R_SH_JMP_SLOT)) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-		            _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of jump instruction to fix up */
 	instr_addr = (unsigned long) (this_reloc->r_offset + tpnt->loadaddr);
 	got_addr = (char **) instr_addr;
Index: ldso/ldso/bfin/elfinterp.c
===================================================================
--- ldso/ldso/bfin/elfinterp.c	(revision 25081)
+++ ldso/ldso/bfin/elfinterp.c	(working copy)
@@ -40,7 +40,6 @@
 struct funcdesc_value volatile *__attribute__((__visibility__("hidden")))
 _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry)
 {
-	int reloc_type;
 	ELF_RELOC *this_reloc;
 	char *strtab;
 	ElfW(Sym) *symtab;
@@ -55,19 +54,12 @@
 	rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL];
 
 	this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry);
-	reloc_type = ELF_R_TYPE(this_reloc->r_info);
 	symtab_index = ELF_R_SYM(this_reloc->r_info);
 
 	symtab = (Elf32_Sym *) tpnt->dynamic_info[DT_SYMTAB];
 	strtab = (char *) tpnt->dynamic_info[DT_STRTAB];
 	symname= strtab + symtab[symtab_index].st_name;
 
-	if (reloc_type != R_BFIN_FUNCDESC_VALUE) {
-		_dl_dprintf(2, "%s: Incorrect relocation type in jump relocations\n",
-			    _dl_progname);
-		_dl_exit(1);
-	}
-
 	/* Address of GOT entry fix up */
 	got_entry = (struct funcdesc_value *) DL_RELOC_ADDR(tpnt->loadaddr, this_reloc->r_offset);
 
Index: ldso/libdl/libdl.c
===================================================================
--- ldso/libdl/libdl.c	(revision 25081)
+++ ldso/libdl/libdl.c	(working copy)
@@ -83,7 +83,7 @@
 char *_dl_debug_detail    = NULL;
 char *_dl_debug_nofixups  = NULL;
 char *_dl_debug_bindings  = NULL;
-int   _dl_debug_file      = NULL;
+int   _dl_debug_file      = 0;
 #endif
 const char *_dl_progname       = "";        /* Program name */
 void *(*_dl_malloc_function)(size_t);


More information about the uClibc mailing list