This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Update ARM for ABIVERSION changes


I've applied this patch to update the ARM port for the ABIVERSION changes 
in libc.  This is simpler than the MIPS case because there aren't any 
nonzero ABIVERSION values already in use for ARM.

ARM had its own definitions of VALID_ELF_* in order to accept 
ELFOSABI_ARM, an old-ABI value.  I've changed it to align with the generic 
Linux version but accept ELFOSABI_ARM for old-ABI (untested) and 
ELFOSABI_ARM_AEABI for new-ABI.  Note that this will require 
<http://sourceware.org/ml/libc-alpha/2010-03/msg00061.html> to be 
committed to libc to unbreak the ARM build.

diff --git a/ChangeLog.arm b/ChangeLog.arm
index aa8f2d7..d13f4a3 100644
--- a/ChangeLog.arm
+++ b/ChangeLog.arm
@@ -1,3 +1,9 @@
+2010-03-30  Joseph Myers  <joseph@codesourcery.com>
+
+	* sysdeps/arm/dl-machine.h (VALID_ELF_ABIVERSION, VALID_ELF_OSABI,
+	VALID_ELF_HEADER): Remove.
+	* sysdeps/unix/sysv/linux/arm/ldsodefs.h: New.
+
 2010-03-26  Thomas Schwinge  <thomas@codesourcery.com>
 
 	* sysdeps/arm/configure.in: New file.
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index f839d97..c555763 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -1,6 +1,6 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  ARM version.
-   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005
-	Free Software Foundation, Inc.
+   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,
+	2006, 2009, 2010 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
@@ -26,14 +26,6 @@
 #include <sys/param.h>
 #include <tls.h>
 
-#define VALID_ELF_ABIVERSION(ver)	(ver == 0)
-#define VALID_ELF_OSABI(osabi) \
-  (osabi == ELFOSABI_SYSV || osabi == ELFOSABI_ARM)
-#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])
-
 #define CLEAR_CACHE(BEG,END)						\
   INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0)
 
diff --git a/sysdeps/unix/sysv/linux/arm/ldsodefs.h b/sysdeps/unix/sysv/linux/arm/ldsodefs.h
new file mode 100644
index 0000000..3747c3b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/ldsodefs.h
@@ -0,0 +1,65 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
+   Copyright (C) 2010 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.  */
+
+#ifndef _ARM_LINUX_LDSODEFS_H
+#define _ARM_LINUX_LDSODEFS_H 1
+
+#include_next <ldsodefs.h>
+
+#undef VALID_ELF_HEADER
+#undef VALID_ELF_OSABI
+
+#ifdef __ARM_EABI__
+#define EXTRA_OSABI ELFOSABI_ARM_AEABI
+#else
+#define EXTRA_OSABI ELFOSABI_ARM
+#endif
+
+#define VALID_ELF_HEADER(hdr,exp,size)		\
+  (memcmp (hdr, exp, size) == 0			\
+   || memcmp (hdr, expected2, size) == 0	\
+   || memcmp (hdr, expected3, size) == 0)
+#define VALID_ELF_OSABI(osabi)		(osabi == ELFOSABI_SYSV		\
+					 || osabi == EXTRA_OSABI	\
+					 || osabi == ELFOSABI_LINUX)
+#define MORE_ELF_HEADER_DATA				\
+  static const unsigned char expected2[EI_PAD] =	\
+  {							\
+    [EI_MAG0] = ELFMAG0,				\
+    [EI_MAG1] = ELFMAG1,				\
+    [EI_MAG2] = ELFMAG2,				\
+    [EI_MAG3] = ELFMAG3,				\
+    [EI_CLASS] = ELFW(CLASS),				\
+    [EI_DATA] = byteorder,				\
+    [EI_VERSION] = EV_CURRENT,				\
+    [EI_OSABI] = ELFOSABI_LINUX				\
+  };							\
+  static const unsigned char expected3[EI_PAD] =	\
+  {							\
+    [EI_MAG0] = ELFMAG0,				\
+    [EI_MAG1] = ELFMAG1,				\
+    [EI_MAG2] = ELFMAG2,				\
+    [EI_MAG3] = ELFMAG3,				\
+    [EI_CLASS] = ELFW(CLASS),				\
+    [EI_DATA] = byteorder,				\
+    [EI_VERSION] = EV_CURRENT,				\
+    [EI_OSABI] = EXTRA_OSABI				\
+  }
+
+#endif

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]