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]

ARM EABI 8-byte-alignment build attributes


I've applied this patch to ensure that all objects in ARM EABI glibc
have the proper EABI build attributes to indicate that 8-byte stack
alignment is required and preserved.  (GNU ld does not currently give
errors for mixing code requiring 8-byte alignment - such as anything
built with GCC - and code not marked as preserving it, because of the
prevalence of assembly code without proper markers to indicate that
alignment is preserved.  The ARM RealView linker does give such
errors.)

The bulk of the markers are accomplished by the change to sysdep.h,
but a few .S files do not include sysdep.h.  In the case of
internal_accept4.S, no code is generated because EABI does not have
socketcall, but for completeness a dummy file with the right
attributes is used to override the default version in libc.

diff --git a/ChangeLog.arm b/ChangeLog.arm
index f098f3c..170d51a 100644
--- a/ChangeLog.arm
+++ b/ChangeLog.arm
@@ -1,3 +1,12 @@
+2009-10-22  Daniel Gutson  <dgutson@codesourcery.com>
+
+	* sysdeps/arm/sysdep.h: (Tag_ABI_align8_preserved,
+	Tag_ABI_align8_needed): Attributes added.
+	* sysdeps/arm/elf/start.S: Likewise.
+	* sysdeps/arm/eabi/abi-note.S: New file.
+	* sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S: New
+	file.
+
 2009-10-22  Andrew Stubbs  <ams@codesourcery.com>
             Julian Brown  <julian@codesourcery.com>
 
diff --git a/sysdeps/arm/eabi/abi-note.S b/sysdeps/arm/eabi/abi-note.S
new file mode 100644
index 0000000..1060c3d
--- /dev/null
+++ b/sysdeps/arm/eabi/abi-note.S
@@ -0,0 +1,9 @@
+/* Tag_ABI_align8_preserved: This code preserves 8-byte
+   alignment in any callee.  */
+	.eabi_attribute 25, 1
+/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
+   the caller.  */
+	.eabi_attribute 24, 1
+
+#include <csu/abi-note.S>
+
diff --git a/sysdeps/arm/elf/start.S b/sysdeps/arm/elf/start.S
index d21102e..c69f19d 100644
--- a/sysdeps/arm/elf/start.S
+++ b/sysdeps/arm/elf/start.S
@@ -58,6 +58,16 @@
 		...
 					NULL
 */
+
+#if defined(__ARM_EABI__)
+/* Tag_ABI_align8_preserved: This code preserves 8-byte
+   alignment in any callee.  */
+	.eabi_attribute 25, 1
+/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
+   the caller.  */
+	.eabi_attribute 24, 1
+#endif
+
 #if defined(__thumb2__)
 	.thumb
 	.syntax unified
diff --git a/sysdeps/arm/sysdep.h b/sysdeps/arm/sysdep.h
index 8ca77a6..442d3a1 100644
--- a/sysdeps/arm/sysdep.h
+++ b/sysdeps/arm/sysdep.h
@@ -105,4 +105,13 @@
 #define mcount		_mcount
 #endif
 
+#if defined(__ARM_EABI__)
+/* Tag_ABI_align8_preserved: This code preserves 8-byte
+   alignment in any callee.  */
+	.eabi_attribute 25, 1
+/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
+   the caller.  */
+	.eabi_attribute 24, 1
+#endif
+
 #endif	/* __ASSEMBLER__ */
diff --git a/sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S b/sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S
new file mode 100644
index 0000000..eeb5f50
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S
@@ -0,0 +1,6 @@
+/* Tag_ABI_align8_preserved: This code preserves 8-byte
+   alignment in any callee.  */
+	.eabi_attribute 25, 1
+/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
+   the caller.  */
+	.eabi_attribute 24, 1

-- 
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]