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)