So it seems clang honours .align 0 (meaning things should be
byte-aligned) leading to SIGBUS when compiling libc with clang. Diff
below turns the relevant ones into .align 2 and removes unecessary
directives from Ovfork.S.
I think arm64 suffers from the same problem; I will fix it in a
separate diff.
ok?
Index: lib/libc/arch/arm/sys/Ovfork.S
===================================================================
RCS file: /cvs/src/lib/libc/arch/arm/sys/Ovfork.S,v
retrieving revision 1.7
diff -u -p -r1.7 Ovfork.S
--- lib/libc/arch/arm/sys/Ovfork.S 6 Aug 2016 19:16:09 -0000 1.7
+++ lib/libc/arch/arm/sys/Ovfork.S 21 Nov 2017 16:53:12 -0000
@@ -34,9 +34,6 @@
#include "SYS.h"
- .text
- .align 0
-
SYSENTRY_HIDDEN(vfork)
mov r2, r14
SYSTRAP(vfork)
Index: lib/libc/arch/arm/sys/brk.S
===================================================================
RCS file: /cvs/src/lib/libc/arch/arm/sys/brk.S,v
retrieving revision 1.9
diff -u -p -r1.9 brk.S
--- lib/libc/arch/arm/sys/brk.S 6 Aug 2016 19:16:09 -0000 1.9
+++ lib/libc/arch/arm/sys/brk.S 21 Nov 2017 16:53:12 -0000
@@ -38,7 +38,7 @@
.globl __curbrk
.data
- .align 0
+ .align 2
.type __minbrk,#object
__minbrk:
.word _C_LABEL(_end)
Index: lib/libc/arch/arm/sys/sbrk.S
===================================================================
RCS file: /cvs/src/lib/libc/arch/arm/sys/sbrk.S,v
retrieving revision 1.9
diff -u -p -r1.9 sbrk.S
--- lib/libc/arch/arm/sys/sbrk.S 6 Aug 2016 19:16:09 -0000 1.9
+++ lib/libc/arch/arm/sys/sbrk.S 21 Nov 2017 16:53:12 -0000
@@ -37,7 +37,7 @@
.globl _C_LABEL(_end)
.data
- .align 0
+ .align 2
.globl __curbrk
.type __curbrk,#object
.hidden __curbrk
@@ -77,7 +77,7 @@ ENTRY(sbrk)
/* Return old curbrk value */
mov r15, r14
- .align 0
+ .align 2
#ifdef __PIC__
.Lgot:
.word _C_LABEL(_GLOBAL_OFFSET_TABLE_) - (.L1+8)