From 274895575e732a4ae6117c8a4469552b36c5d783 Mon Sep 17 00:00:00 2001 From: Daniel Gutson Date: Thu, 22 Oct 2009 19:39:47 +0000 Subject: [PATCH] Add ARM EABI build attributes. 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. * 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. --- ChangeLog.arm | 9 +++++++++ sysdeps/arm/eabi/abi-note.S | 9 +++++++++ sysdeps/arm/elf/start.S | 10 ++++++++++ sysdeps/arm/sysdep.h | 9 +++++++++ sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S | 6 ++++++ 5 files changed, 43 insertions(+) create mode 100644 sysdeps/arm/eabi/abi-note.S create mode 100644 sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S 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 + + * 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 Julian Brown 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 + 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 -- 2.7.4