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 <[email protected]> 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); _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
