mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
Update.
2001-07-13 H.J. Lu <hjl@gnu.org> * sysdeps/mips/dl-machine.h (MAP_BASE_ADDR): Removed. (elf_machine_got_rel): Defined only if RTLD_BOOTSTRAP is not defined. (RESOLVE_GOTSYM): Rewrite to use RESOLVE. * sysdeps/mips/rtld-ldscript.in: Removed. * sysdeps/mips/rtld-parms: Likewise. * sysdeps/mips/mips64/rtld-parms: Likewise. * sysdeps/mips/mipsel/rtld-parms: Likewise.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2001-07-13 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
|
* sysdeps/mips/dl-machine.h (MAP_BASE_ADDR): Removed.
|
||||||
|
(elf_machine_got_rel): Defined only if RTLD_BOOTSTRAP is not defined.
|
||||||
|
(RESOLVE_GOTSYM): Rewrite to use RESOLVE.
|
||||||
|
|
||||||
|
* sysdeps/mips/rtld-ldscript.in: Removed.
|
||||||
|
* sysdeps/mips/rtld-parms: Likewise.
|
||||||
|
* sysdeps/mips/mips64/rtld-parms: Likewise.
|
||||||
|
* sysdeps/mips/mipsel/rtld-parms: Likewise.
|
||||||
|
|
||||||
2001-07-16 Ulrich Drepper <drepper@redhat.com>
|
2001-07-16 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* catgets/test-gencat.sh: Use <<"EOF" instead of <<EOF to prevent
|
* catgets/test-gencat.sh: Use <<"EOF" instead of <<EOF to prevent
|
||||||
|
@@ -1,6 +1,13 @@
|
|||||||
|
2001-07-16 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* Makefile (before-compile): Don't add $(objpfx)crti.o.
|
||||||
|
(omit-deps): Add crti.
|
||||||
|
($(objpfx)libpthread.so): Depend on $(objpfx)crti.o, but make sure
|
||||||
|
it is filtered out of the link command.
|
||||||
|
|
||||||
2001-07-16 Ulrich Drepper <drepper@redhat.com>
|
2001-07-16 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* pthread.c (pthread_initialize): For FLOATING_STACKS do't bother
|
* pthread.c (pthread_initialize): For FLOATING_STACKS don't bother
|
||||||
to find the right value for __pthread_initial_thread_bos, it's not
|
to find the right value for __pthread_initial_thread_bos, it's not
|
||||||
used. If not FLOATING_STACKS first run
|
used. If not FLOATING_STACKS first run
|
||||||
__pthread_init_max_stacksize.
|
__pthread_init_max_stacksize.
|
||||||
|
@@ -51,8 +51,8 @@ CFLAGS-tst-cancel.c = -fno-inline
|
|||||||
include ../Makeconfig
|
include ../Makeconfig
|
||||||
|
|
||||||
ifeq ($(build-shared),yes)
|
ifeq ($(build-shared),yes)
|
||||||
before-compile := $(objpfx)crti.o
|
extra-objs += crti.o
|
||||||
extra-objs = crti.o
|
omit-deps += crti
|
||||||
|
|
||||||
CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions
|
CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions
|
||||||
endif
|
endif
|
||||||
@@ -69,6 +69,8 @@ endif
|
|||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
extra-B-pthread.so = -B$(common-objpfx)linuxthreads/
|
extra-B-pthread.so = -B$(common-objpfx)linuxthreads/
|
||||||
|
$(objpfx)libpthread.so: $(objpfx)crti.o
|
||||||
|
$(objpfx)libpthread.so: +preinit += $(objpfx)crti.o
|
||||||
|
|
||||||
znodelete-yes = -DHAVE_Z_NODELETE
|
znodelete-yes = -DHAVE_Z_NODELETE
|
||||||
CFLAGS-mutex.c += -D__NO_WEAK_PTHREAD_ALIASES
|
CFLAGS-mutex.c += -D__NO_WEAK_PTHREAD_ALIASES
|
||||||
|
@@ -61,23 +61,6 @@
|
|||||||
in l_info array. */
|
in l_info array. */
|
||||||
#define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM)
|
#define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM)
|
||||||
|
|
||||||
/*
|
|
||||||
* MIPS libraries are usually linked to a non-zero base address. We
|
|
||||||
* subtract the base address from the address where we map the object
|
|
||||||
* to. This results in more efficient address space usage.
|
|
||||||
*
|
|
||||||
* FIXME: By the time when MAP_BASE_ADDR is called we don't have the
|
|
||||||
* DYNAMIC section read. Until this is fixed make the assumption that
|
|
||||||
* libraries have their base address at 0x5ffe0000. This needs to be
|
|
||||||
* fixed before we can safely get rid of this MIPSism.
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
#define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
|
|
||||||
(l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
|
|
||||||
#else
|
|
||||||
#define MAP_BASE_ADDR(l) 0x5ffe0000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
|
/* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
|
||||||
with the run-time address of the r_debug structure */
|
with the run-time address of the r_debug structure */
|
||||||
#define ELF_MACHINE_DEBUG_SETUP(l,r) \
|
#define ELF_MACHINE_DEBUG_SETUP(l,r) \
|
||||||
@@ -557,51 +540,30 @@ elf_machine_lazy_rel (struct link_map *map,
|
|||||||
/* Do nothing. */
|
/* Do nothing. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef RTLD_BOOTSTRAP
|
||||||
/* Relocate GOT. */
|
/* Relocate GOT. */
|
||||||
static inline void
|
static inline void
|
||||||
elf_machine_got_rel (struct link_map *map, int lazy)
|
elf_machine_got_rel (struct link_map *map, int lazy)
|
||||||
{
|
{
|
||||||
ElfW(Addr) *got;
|
ElfW(Addr) *got;
|
||||||
ElfW(Sym) *sym;
|
ElfW(Sym) *sym;
|
||||||
|
const ElfW(Half) *vernum;
|
||||||
int i, n, symidx;
|
int i, n, symidx;
|
||||||
/* This function is loaded in dl-reloc as a nested function and can
|
|
||||||
therefore access the variables scope and strtab from
|
#define RESOLVE_GOTSYM(sym,vernum,sym_index) \
|
||||||
_dl_relocate_object. */
|
|
||||||
#ifdef RTLD_BOOTSTRAP
|
|
||||||
# define RESOLVE_GOTSYM(sym,sym_index) 0
|
|
||||||
#else
|
|
||||||
# define RESOLVE_GOTSYM(sym,sym_index) \
|
|
||||||
({ \
|
({ \
|
||||||
const ElfW(Sym) *ref = sym; \
|
const ElfW(Sym) *ref = sym; \
|
||||||
|
const struct r_found_version *version \
|
||||||
|
= vernum ? &map->l_versions [vernum [sym_index]] : NULL; \
|
||||||
ElfW(Addr) value; \
|
ElfW(Addr) value; \
|
||||||
\
|
value = RESOLVE (&ref, version, R_MIPS_REL32); \
|
||||||
switch (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL) \
|
|
||||||
{ \
|
|
||||||
default: \
|
|
||||||
{ \
|
|
||||||
const ElfW(Half) *vernum = \
|
|
||||||
(const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); \
|
|
||||||
ElfW(Half) ndx = vernum[sym_index]; \
|
|
||||||
const struct r_found_version *version = &l->l_versions[ndx]; \
|
|
||||||
\
|
|
||||||
if (version->hash != 0) \
|
|
||||||
{ \
|
|
||||||
value = _dl_lookup_versioned_symbol(strtab + sym->st_name,\
|
|
||||||
map, \
|
|
||||||
&ref, scope, version, \
|
|
||||||
R_MIPS_REL32, 0); \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
/* Fall through. */ \
|
|
||||||
} \
|
|
||||||
case 0: \
|
|
||||||
value = _dl_lookup_symbol (strtab + sym->st_name, map, &ref, \
|
|
||||||
scope, R_MIPS_REL32, 0); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
(ref)? value + ref->st_value: 0; \
|
(ref)? value + ref->st_value: 0; \
|
||||||
})
|
})
|
||||||
#endif /* RTLD_BOOTSTRAP */
|
|
||||||
|
if (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
|
||||||
|
vernum = (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]);
|
||||||
|
else
|
||||||
|
vernum = NULL;
|
||||||
|
|
||||||
got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]);
|
got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]);
|
||||||
|
|
||||||
@@ -639,10 +601,10 @@ elf_machine_got_rel (struct link_map *map, int lazy)
|
|||||||
&& sym->st_value && lazy)
|
&& sym->st_value && lazy)
|
||||||
*got = sym->st_value + map->l_addr;
|
*got = sym->st_value + map->l_addr;
|
||||||
else
|
else
|
||||||
*got = RESOLVE_GOTSYM (sym, symidx);
|
*got = RESOLVE_GOTSYM (sym, vernum, symidx);
|
||||||
}
|
}
|
||||||
else if (sym->st_shndx == SHN_COMMON)
|
else if (sym->st_shndx == SHN_COMMON)
|
||||||
*got = RESOLVE_GOTSYM (sym, symidx);
|
*got = RESOLVE_GOTSYM (sym, vernum, symidx);
|
||||||
else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
|
else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
|
||||||
&& *got != sym->st_value
|
&& *got != sym->st_value
|
||||||
&& lazy)
|
&& lazy)
|
||||||
@@ -653,7 +615,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
|
|||||||
*got += map->l_addr;
|
*got += map->l_addr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*got = RESOLVE_GOTSYM (sym, symidx);
|
*got = RESOLVE_GOTSYM (sym, vernum, symidx);
|
||||||
|
|
||||||
++got;
|
++got;
|
||||||
++sym;
|
++sym;
|
||||||
@@ -661,9 +623,8 @@ elf_machine_got_rel (struct link_map *map, int lazy)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#undef RESOLVE_GOTSYM
|
#undef RESOLVE_GOTSYM
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up the loaded object described by L so its stub function
|
/* Set up the loaded object described by L so its stub function
|
||||||
will jump to the on-demand fixup code __dl_runtime_resolve. */
|
will jump to the on-demand fixup code __dl_runtime_resolve. */
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
ifndef rtld-wordsize
|
|
||||||
rtld-wordsize = 64
|
|
||||||
endif
|
|
@@ -1,3 +0,0 @@
|
|||||||
ifndef rtld-oformat
|
|
||||||
rtld-oformat = elf32-littlemips
|
|
||||||
endif
|
|
@@ -1,105 +0,0 @@
|
|||||||
OUTPUT_ARCH(@@rtld-arch@@)
|
|
||||||
ENTRY(@@rtld-entry@@)
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* Read-only sections, merged into text segment: */
|
|
||||||
. = @@rtld-base@@;
|
|
||||||
.reginfo : { *(.reginfo) }
|
|
||||||
.dynamic : { *(.dynamic) }
|
|
||||||
.dynstr : { *(.dynstr) }
|
|
||||||
.dynsym : { *(.dynsym) }
|
|
||||||
.hash : { *(.hash) }
|
|
||||||
.rel.text : { *(.rel.text) }
|
|
||||||
.rela.text : { *(.rela.text) }
|
|
||||||
.rel.data : { *(.rel.data) }
|
|
||||||
.rela.data : { *(.rela.data) }
|
|
||||||
.rel.rodata : { *(.rel.rodata) }
|
|
||||||
.rela.rodata : { *(.rela.rodata) }
|
|
||||||
.rel.got : { *(.rel.got) }
|
|
||||||
.rela.got : { *(.rela.got) }
|
|
||||||
.rel.ctors : { *(.rel.ctors) }
|
|
||||||
.rela.ctors : { *(.rela.ctors) }
|
|
||||||
.rel.dtors : { *(.rel.dtors) }
|
|
||||||
.rela.dtors : { *(.rela.dtors) }
|
|
||||||
.rel.init : { *(.rel.init) }
|
|
||||||
.rela.init : { *(.rela.init) }
|
|
||||||
.rel.fini : { *(.rel.fini) }
|
|
||||||
.rela.fini : { *(.rela.fini) }
|
|
||||||
.rel.bss : { *(.rel.bss) }
|
|
||||||
.rela.bss : { *(.rela.bss) }
|
|
||||||
.rel.plt : { *(.rel.plt) }
|
|
||||||
.rela.plt : { *(.rela.plt) }
|
|
||||||
.rodata : { *(.rodata) }
|
|
||||||
.rodata1 : { *(.rodata1) }
|
|
||||||
.init : { *(.init) } =0
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
*(.text)
|
|
||||||
*(.stub)
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
} =0
|
|
||||||
.fini : { *(.fini) } =0
|
|
||||||
/* Adjust the address for the data segment. We want to adjust up to
|
|
||||||
the same address within the page on the next page up. It would
|
|
||||||
be more correct to do this:
|
|
||||||
. = 0x10000000;
|
|
||||||
The current expression does not correctly handle the case of a
|
|
||||||
text segment ending precisely at the end of a page; it causes the
|
|
||||||
data segment to skip a page. The above expression does not have
|
|
||||||
this problem, but it will currently (2/95) cause BFD to allocate
|
|
||||||
a single segment, combining both text and data, for this case.
|
|
||||||
This will prevent the text segment from being shared among
|
|
||||||
multiple executions of the program; I think that is more
|
|
||||||
important than losing a page of the virtual address space (note
|
|
||||||
that no actual memory is lost; the page which is skipped can not
|
|
||||||
be referenced). */
|
|
||||||
. += 0x10000;
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
*(.data)
|
|
||||||
CONSTRUCTORS
|
|
||||||
}
|
|
||||||
.data1 : { *(.data1) }
|
|
||||||
.ctors : { *(.ctors) }
|
|
||||||
.dtors : { *(.dtors) }
|
|
||||||
_gp = ALIGN(16) + 0x7ff0;
|
|
||||||
.got :
|
|
||||||
{
|
|
||||||
*(.got.plt) *(.got)
|
|
||||||
}
|
|
||||||
/* We want the small data sections together, so single-instruction offsets
|
|
||||||
can access them all, and initialized data all before uninitialized, so
|
|
||||||
we can shorten the on-disk segment size. */
|
|
||||||
.sdata : { *(.sdata) }
|
|
||||||
.lit8 : { *(.lit8) }
|
|
||||||
.lit4 : { *(.lit4) }
|
|
||||||
.sbss : { *(.sbss) *(.scommon) }
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(COMMON)
|
|
||||||
}
|
|
||||||
/* The normal linker scripts created by the binutils doesn't have the
|
|
||||||
symbols end and _end which breaks ld.so's dl-minimal.c. */
|
|
||||||
_end = . ;
|
|
||||||
PROVIDE (end = .);
|
|
||||||
/* These are needed for ELF backends which have not yet been
|
|
||||||
converted to the new style linker. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the .debug DWARF section are relative to the beginning of the
|
|
||||||
section so we begin .debug at 0. It's not clear yet what needs to happen
|
|
||||||
for the others. */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
|
||||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
|
||||||
}
|
|
@@ -1,15 +0,0 @@
|
|||||||
ifndef rtld-wordsize
|
|
||||||
rtld-wordsize = 32
|
|
||||||
endif
|
|
||||||
ifndef rtld-oformat
|
|
||||||
rtld-oformat = elf$(rtld-wordsize)-bigmips
|
|
||||||
endif
|
|
||||||
ifndef rtld-arch
|
|
||||||
rtld-arch = mips
|
|
||||||
endif
|
|
||||||
ifndef rtld-entry
|
|
||||||
rtld-entry = __start
|
|
||||||
endif
|
|
||||||
ifndef rtld-base
|
|
||||||
rtld-base = 0x0fb60000 + SIZEOF_HEADERS
|
|
||||||
endif
|
|
Reference in New Issue
Block a user