Fix libc-abis handling for MIPS
Joseph S. Myers
joseph@codesourcery.com
Tue Apr 6 20:29:00 GMT 2010
I've applied this patch to fix the build for MIPS by updating the
abiversion handling for libc changes.
Note that for the ports libc-abis file to be *used* requires the libc
patch <http://sourceware.org/ml/libc-alpha/2010-04/msg00004.html> (without
it, glibc will still build, but will share the same ABI version for
MIPS_PLT and UNIQUE).
diff --git a/ChangeLog b/ChangeLog
index fcd2011..135c1f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-04-06 Joseph Myers <joseph@codesourcery.com>
+
+ * libc-abis: New.
+
2006-03-06 Roland McGrath <roland@redhat.com>
* 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 <joseph@codesourcery.com>
+
+ * 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 <joseph@codesourcery.com>
* 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 */
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-ports
mailing list