From 1dbb4edc731763ddf362c2fbfc13850e5f9267e2 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 6 Apr 2010 20:26:22 +0000 Subject: [PATCH] Fix abiversion handling for MIPS. --- ChangeLog | 4 ++++ ChangeLog.mips | 7 +++++++ libc-abis | 16 ++++++++++++++++ sysdeps/mips/dl-machine.h | 9 --------- sysdeps/unix/sysv/linux/mips/ldsodefs.h | 8 ++++++++ 5 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 libc-abis diff --git a/ChangeLog b/ChangeLog index fcd2011..135c1f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-04-06 Joseph Myers + + * libc-abis: New. + 2006-03-06 Roland McGrath * Makefile (%.bz2, %.gz): New pattern rules. diff --git a/ChangeLog.mips b/ChangeLog.mips index 58f0a34..4ac5871 100644 --- a/ChangeLog.mips +++ b/ChangeLog.mips @@ -1,3 +1,10 @@ +2010-04-06 Joseph Myers + + * sysdeps/mips/dl-machine.h (VALID_ELF_ABIVERSION, + VALID_ELF_OSABI, VALID_ELF_HEADER): Remove. + * sysdeps/unix/sysv/linux/mips/ldsodefs.h (VALID_ELF_ABIVERSION): + Define. + 2010-03-30 Joseph Myers * sysdeps/unix/sysv/linux/mips/bits/socket.h: Define diff --git a/libc-abis b/libc-abis new file mode 100644 index 0000000..a66a9ec --- /dev/null +++ b/libc-abis @@ -0,0 +1,16 @@ +# See the copy of this file in libc for detailed explanations. The +# ports copy needs to include all libc definitions applicable to any +# ports target; only one copy will be used. +# +# Feature Name Configuration +# ------------ ------------- +# +# MIPS PLTs. +MIPS_PLT mips*-*-linux* +# +# Unique symbol definitions for C++. +# Architecture independent, all ELF targets (== all targets) +UNIQUE +# +# Indirect PLT relocations. Architecture dependent. +IFUNC powerpc-*-linux* diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h index ef088bf..123b4d6 100644 --- a/sysdeps/mips/dl-machine.h +++ b/sysdeps/mips/dl-machine.h @@ -75,15 +75,6 @@ do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \ (ElfW(Addr)) (r); \ } while (0) -/* Allow ABIVERSION == 1, meaning PLTs and copy relocations are - required. */ -#define VALID_ELF_ABIVERSION(ver) (ver == 0 || ver == 2) -#define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV) -#define VALID_ELF_HEADER(hdr,exp,size) \ - memcmp (hdr,exp,size-2) == 0 \ - && VALID_ELF_OSABI (hdr[EI_OSABI]) \ - && VALID_ELF_ABIVERSION (hdr[EI_ABIVERSION]) - /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute_used__ elf_machine_matches_host (const ElfW(Ehdr) *ehdr) diff --git a/sysdeps/unix/sysv/linux/mips/ldsodefs.h b/sysdeps/unix/sysv/linux/mips/ldsodefs.h index 8d5efec..2cb7db6 100644 --- a/sysdeps/unix/sysv/linux/mips/ldsodefs.h +++ b/sysdeps/unix/sysv/linux/mips/ldsodefs.h @@ -30,4 +30,12 @@ extern void _dl_static_init (struct link_map *map); #undef DL_STATIC_INIT #define DL_STATIC_INIT(map) _dl_static_init (map) +/* Allow ABIVERSION == 1, meaning PLTs and copy relocations are + required, with ELFOSABI_SYSV. */ +#undef VALID_ELF_ABIVERSION +#define VALID_ELF_ABIVERSION(osabi,ver) \ + (ver == 0 \ + || (osabi == ELFOSABI_SYSV && ver < 2) \ + || (osabi == ELFOSABI_LINUX && ver < LIBC_ABI_MAX)) + #endif /* ldsodefs.h */ -- 2.7.4