[email protected] wrote:
> 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
>
Applied in rev 25093, thanks.
Carmelo
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc