2001-02-28  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle
	relocations which are not in ld.so if RTLD_BOOTSTRAP is defined.

	* sysdeps/powerpc/dl-machine.c (__process_machine_rela): Fix typo.

	* elf/dl-misc.c (_dl_debug_vdprintf): Fix type visible on 64-bit
	machines.

	* sysdeps/unix/sysv/linux/powerpc/sysdep.h (C_TEXT): Define.
This commit is contained in:
Ulrich Drepper 2001-02-28 15:24:30 +00:00
parent 406191784b
commit 7b97934bf9
5 changed files with 24 additions and 7 deletions

View File

@ -1,3 +1,15 @@
2001-02-28 Ulrich Drepper <drepper@redhat.com>
* sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle
relocations which are not in ld.so if RTLD_BOOTSTRAP is defined.
* sysdeps/powerpc/dl-machine.c (__process_machine_rela): Fix typo.
* elf/dl-misc.c (_dl_debug_vdprintf): Fix type visible on 64-bit
machines.
* sysdeps/unix/sysv/linux/powerpc/sysdep.h (C_TEXT): Define.
2001-02-27 Ulrich Drepper <drepper@redhat.com> 2001-02-27 Ulrich Drepper <drepper@redhat.com>
* sysdeps/powerpc/elf/libc-start.c: Use new output functions and * sysdeps/powerpc/elf/libc-start.c: Use new output functions and

View File

@ -181,7 +181,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
different size. */ different size. */
#if LONG_MAX != INT_MAX #if LONG_MAX != INT_MAX
unsigned long int num = (long_mod unsigned long int num = (long_mod
? va_arg (arg, unsigned long int); ? va_arg (arg, unsigned long int)
: va_arg (arg, unsigned int)); : va_arg (arg, unsigned int));
#else #else
unsigned long int num = va_arg (arg, unsigned int); unsigned long int num = va_arg (arg, unsigned int);

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. Alpha version. /* Machine-dependent ELF dynamic relocation inline functions. Alpha version.
Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>. Contributed by Richard Henderson <rth@tamu.edu>.
@ -500,8 +500,10 @@ elf_machine_rela (struct link_map *map,
memcpy (reloc_addr_1, &reloc_addr_val, 8); memcpy (reloc_addr_1, &reloc_addr_val, 8);
} }
} }
#ifndef RTLD_BOOTSTRAP
else if (r_type == R_ALPHA_NONE) else if (r_type == R_ALPHA_NONE)
return; return;
#endif
else else
{ {
Elf64_Addr loadbase, sym_value; Elf64_Addr loadbase, sym_value;
@ -512,8 +514,9 @@ elf_machine_rela (struct link_map *map,
if (r_type == R_ALPHA_GLOB_DAT) if (r_type == R_ALPHA_GLOB_DAT)
*reloc_addr = sym_value; *reloc_addr = sym_value;
else if (r_type == R_ALPHA_JMP_SLOT) else if (r_type == R_ALPHA_JMP_SLOT)
elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value);
#ifndef RTLD_BOOTSTRAP
else if (r_type == R_ALPHA_REFQUAD) else if (r_type == R_ALPHA_REFQUAD)
{ {
void *reloc_addr_1 = reloc_addr; void *reloc_addr_1 = reloc_addr;
@ -522,7 +525,6 @@ elf_machine_rela (struct link_map *map,
/* Load value without causing unaligned trap. */ /* Load value without causing unaligned trap. */
memcpy (&reloc_addr_val, reloc_addr_1, 8); memcpy (&reloc_addr_val, reloc_addr_1, 8);
sym_value += reloc_addr_val; sym_value += reloc_addr_val;
#ifndef RTLD_BOOTSTRAP
if (map == &_dl_rtld_map) if (map == &_dl_rtld_map)
{ {
/* Undo the relocation done here during bootstrapping. /* Undo the relocation done here during bootstrapping.
@ -536,10 +538,10 @@ elf_machine_rela (struct link_map *map,
sym_value -= dlsymtab[ELF64_R_SYM(reloc->r_info)].st_value; sym_value -= dlsymtab[ELF64_R_SYM(reloc->r_info)].st_value;
sym_value -= reloc->r_addend; sym_value -= reloc->r_addend;
} }
#endif
/* Store value without causing unaligned trap. */ /* Store value without causing unaligned trap. */
memcpy (reloc_addr_1, &sym_value, 8); memcpy (reloc_addr_1, &sym_value, 8);
} }
#endif
else else
_dl_reloc_bad_type (map, r_type, 0); _dl_reloc_bad_type (map, r_type, 0);
} }

View File

@ -469,7 +469,7 @@ __process_machine_rela (struct link_map *map,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, onsider re-linking\n" %s: Symbol `%s' has different size in shared object, onsider re-linking\n",
_dl_argv[0] ?: "<program name unknown>", _dl_argv[0] ?: "<program name unknown>",
strtab + refsym->st_name); strtab + refsym->st_name);
} }

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. /* Copyright (C) 1992,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -144,6 +144,9 @@
#undef L #undef L
#define L(x) .L##x #define L(x) .L##x
/* Label in text section. */
#define C_TEXT(name) name
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#endif /* linux/powerpc/sysdep.h */ #endif /* linux/powerpc/sysdep.h */