mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-05 19:35:52 +03:00
Update.
* sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Handle symbol versioning. 2000-04-13 Andreas Jaeger <aj@suse.de>
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2000-04-13 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Handle symbol
|
||||||
|
versioning.
|
||||||
|
|
||||||
2000-04-13 Andreas Jaeger <aj@suse.de>
|
2000-04-13 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/mips/clone.S: Fix function.
|
* sysdeps/unix/sysv/linux/mips/clone.S: Fix function.
|
||||||
|
@@ -233,22 +233,51 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \
|
|||||||
= (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
|
= (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \
|
||||||
const ElfW(Word) gotsym \
|
const ElfW(Word) gotsym \
|
||||||
= (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; \
|
= (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; \
|
||||||
const ElfW(Sym) *definer; \
|
const ElfW(Sym) *sym; \
|
||||||
ElfW(Addr) loadbase; \
|
|
||||||
ElfW(Addr) funcaddr; \
|
ElfW(Addr) funcaddr; \
|
||||||
|
ElfW(Addr) value; \
|
||||||
\
|
\
|
||||||
/* Look up the symbol's run-time value. */ \
|
/* Look up the symbol's run-time value. */ \
|
||||||
definer = &symtab[sym_index]; \
|
sym = &symtab[sym_index]; \
|
||||||
|
/* FIXME: The symbol versioning stuff is not tested yet. */ \
|
||||||
|
if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) \
|
||||||
|
{ \
|
||||||
|
switch (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) \
|
||||||
|
{ \
|
||||||
|
default: \
|
||||||
|
{ \
|
||||||
|
const ElfW(Half) *vernum = \
|
||||||
|
(const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); \
|
||||||
|
ElfW(Half) ndx = vernum[sym_index]; \
|
||||||
|
const struct r_found_version *version = &l->l_versions[ndx]; \
|
||||||
\
|
\
|
||||||
/* FIXME: Handle symbol versioning correctly. */ \
|
if (version->hash != 0) \
|
||||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, l, &definer, \
|
{ \
|
||||||
l->l_scope, R_MIPS_REL32); \
|
value = _dl_lookup_versioned_symbol(strtab + sym->st_name, l, \
|
||||||
|
&sym, l->l_scope, version,\
|
||||||
|
R_MIPS_REL32); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
/* Fall through. */ \
|
||||||
|
} \
|
||||||
|
case 0: \
|
||||||
|
value = _dl_lookup_symbol (strtab + sym->st_name, l, &sym, \
|
||||||
|
l->l_scope, R_MIPS_REL32); \
|
||||||
|
} \
|
||||||
\
|
\
|
||||||
|
/* Currently value contains the base load address of the object \
|
||||||
|
that defines sym. Now add in the symbol offset. */ \
|
||||||
|
value = (sym ? value + sym->st_value : 0); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
/* We already found the symbol. The module (and therefore its load \
|
||||||
|
address) is also known. */ \
|
||||||
|
value = l->l_addr + sym->st_value; \
|
||||||
|
\
|
||||||
/* Apply the relocation with that value. */ \
|
/* Apply the relocation with that value. */ \
|
||||||
funcaddr = loadbase + definer->st_value; \
|
*(got + local_gotno + sym_index - gotsym) = value; \
|
||||||
*(got + local_gotno + sym_index - gotsym) = funcaddr; \
|
|
||||||
\
|
\
|
||||||
return funcaddr; \
|
return value; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
asm ("\n \
|
asm ("\n \
|
||||||
|
@@ -86,12 +86,13 @@ error:
|
|||||||
|
|
||||||
At this point we have s0=arg, s1=fn. */
|
At this point we have s0=arg, s1=fn. */
|
||||||
|
|
||||||
NESTED(__thread_start,FRAMESZ,sp)
|
ENTRY(__thread_start)
|
||||||
/* cp is already loaded. */
|
/* cp is already loaded. */
|
||||||
|
.cprestore 16
|
||||||
/* The stackframe has been created on entry of clone(). */
|
/* The stackframe has been created on entry of clone(). */
|
||||||
/* Resort the arg for user's function. */
|
/* Resort the arg for user's function. */
|
||||||
move a0,0(sp) /* Function pointer. */
|
lw t9,0(sp) /* Function pointer. */
|
||||||
move t9,4(sp) /* Argument pointer. */
|
lw a0,4(sp) /* Argument pointer. */
|
||||||
|
|
||||||
/* Call the user's function. */
|
/* Call the user's function. */
|
||||||
jalr t9
|
jalr t9
|
||||||
|
Reference in New Issue
Block a user