(elf_machine_rela): Remove unnecessary code and add missing reloc types.

This commit is contained in:
Ulrich Drepper 2001-12-29 00:33:04 +00:00
parent 98519d6201
commit c612d9943c
1 changed files with 27 additions and 25 deletions

View File

@ -389,6 +389,11 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
switch (r_type)
{
case R_390_GLOB_DAT:
case R_390_JMP_SLOT:
*reloc_addr = value;
break;
#ifndef RTLD_BOOTSTRAP
case R_390_COPY:
if (sym == NULL)
/* This can happen in trace mode if an object could not be
@ -409,40 +414,37 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
refsym->st_size));
break;
case R_390_GLOB_DAT:
case R_390_JMP_SLOT:
*reloc_addr = value;
break;
case R_390_32:
{
#ifndef RTLD_BOOTSTRAP
/* This is defined in rtld.c, but nowhere in the static
libc.a; make the reference weak so static programs can
still link. This declaration cannot be done when
compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
rtld.c contains the common defn for _dl_rtld_map, which
is incompatible with a weak decl in the same file. */
weak_extern (_dl_rtld_map);
if (map == &_dl_rtld_map)
/* Undo the relocation done here during bootstrapping.
Now we will relocate it anew, possibly using a
binding found in the user program or a loaded library
rather than the dynamic linker's built-in definitions
used while loading those libraries. */
value -= map->l_addr + refsym->st_value;
#endif
*reloc_addr = value + reloc->r_addend;
break;
}
*reloc_addr = value + reloc->r_addend;
break;
case R_390_16:
*(unsigned short *) reloc_addr = value + reloc->r_addend;
break;
case R_390_8:
*(char *) reloc_addr = value + reloc->r_addend;
break;
case R_390_PC32:
*reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr;
break;
case R_390_PC16DBL:
case R_390_PLT16DBL:
*(unsigned short *) reloc_addr = (unsigned short)
((short) (value + reloc->r_addend - (Elf32_Addr) reloc_addr) >> 1);
break;
case R_390_PC16:
*(unsigned short *) reloc_addr =
value + reloc->r_addend - (Elf32_Addr) reloc_addr;
break;
case R_390_NONE:
break;
#endif
#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG)
default:
/* We add these checks in the version to relocate ld.so only
if we are still debugging. */
_dl_reloc_bad_type (map, r_type, 0);
break;
#endif
}
}
}