From: Daniel Gutson Date: Thu, 22 Oct 2009 19:39:47 +0000 (+0000) Subject: Add ARM EABI build attributes. X-Git-Tag: glibc-2.16-ports-before-merge~591 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=274895575e732a4ae6117c8a4469552b36c5d783;p=thirdparty%2Fglibc.git 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. --- diff --git a/ChangeLog.arm b/ChangeLog.arm index f098f3c9a62..170d51a4dc8 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 00000000000..1060c3d2807 --- /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 d21102ea585..c69f19d3bc7 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 8ca77a60cbe..442d3a146ec 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 00000000000..eeb5f50a265 --- /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