mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-12 12:07:12 +08:00
63fb881a04
Daniel Jacobowitz <dan@codesourcery.com> Richard Sandiford <rdsandiford@googlemail.com> * sysdeps/mips/dl-dtprocnum.h (DT_MIPS_NUM): Redefine. * sysdeps/mips/dl-lookup.c: New. * sysdeps/mips/do-lookup.h: New. * sysdeps/mips/dl-machine.h (ELF_MACHINE_NO_PLT): Remove definition. (STO_MIPS_PLT, R_MIPS_COPY, R_MIPS_JUMP_SLOT, DT_MIPS_PLTGOT): Define if needed. (ELF_MACHINE_JMP_SLOT): Alter definition and update comment. (elf_machine_type_class): Likewise. (ELF_MACHINE_PLT_REL): Define. (elf_machine_fixup_plt): New. (elf_machine_plt_value): New. (elf_machine_reloc): Handle jump slot and copy relocations. (elf_machine_lazy_rel): Point relocation place at PLT if required. (RESOLVE_GOTSYM): Take a relocation type argument. (elf_machine_got_rel): Bind lazy stubs directly to their target if !lazy. Skip lazy binding for PLT symbols. (elf_machine_runtime_setup): Fill in .got.plt header. * sysdeps/mips/dl-trampoline.c (IFNEWABI): New macro. (ELF_DL_PLT_FRAME_SIZE, ELF_DL_PLT_SAVE_ARG_REGS, ELF_DL_PLT_RESTORE_ARG_REGS): Define. (_dl_runtime_pltresolve): New. * sysdeps/mips/bits/linkmap.h: New file. * sysdeps/mips/tls-macros.h: Load $gp as required. Merge 32-bit and 64-bit versions. * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h (SYSCALL_ERROR_LABEL): Delete definition. * sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h (PSEUDO_CPLOAD, PSEUDO_ERRJMP, PSEUDO_SAVEGP, PSEUDO_LOADGP): Define. (PSEUDO): Use them. Move outside __PIC__. (PSEUDO_JMP): New. (CENABLE, CDISABLE): Use it.
38 lines
1.9 KiB
C
38 lines
1.9 KiB
C
/* MIPS-specific veneer to GLIBC's do-lookup.h.
|
|
Copyright (C) 2008 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, write to the Free
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
02111-1307 USA. */
|
|
|
|
/* The semantics of zero/non-zero values of undefined symbols differs
|
|
depending on whether the non-PIC ABI is in use. Under the non-PIC ABI,
|
|
a non-zero value indicates that there is an address reference to the
|
|
symbol and thus it must always be resolved (except when resolving a jump
|
|
slot relocation) to the PLT entry whose address is provided as the
|
|
symbol's value; a zero value indicates that this canonical-address
|
|
behaviour is not required. Yet under the classic MIPS psABI, a zero value
|
|
indicates that there is an address reference to the function and the
|
|
dynamic linker must resolve the symbol immediately upon loading. To
|
|
avoid conflict, symbols for which the dynamic linker must assume the
|
|
non-PIC ABI semantics are marked with the STO_MIPS_PLT flag. The
|
|
following ugly hack causes the code in the platform-independent
|
|
do-lookup.h file to check this flag correctly. */
|
|
#define st_value st_shndx == SHN_UNDEF && !(sym->st_other & STO_MIPS_PLT)) \
|
|
|| (sym->st_value
|
|
#include_next "do-lookup.h"
|
|
#undef st_value
|
|
|