Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jul 2019 12:44:18 -0600
From:      Ian Lepore <ian@freebsd.org>
To:        adr <adr@SDF.ORG>, Mark Millard <marklmi@yahoo.com>
Cc:        Robert Crowston via freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Re: FreeBSD arm EABI5 documentation?
Message-ID:  <0af96399f723a3e55e4c8d1f0e9926f0727f0bb3.camel@freebsd.org>
In-Reply-To: <alpine.NEB.2.21.1907111727500.16650@sdf.lonestar.org>
References:  <alpine.NEB.2.21.1907101508370.22895@sdf.lonestar.org> <f2967859f68f1d40f260661791126956f48f4d12.camel@freebsd.org> <alpine.NEB.2.21.1907101735020.3201@sdf.lonestar.org> <da6a8f7e596da9bf9015f76798a5575908ad1be4.camel@freebsd.org> <alpine.NEB.2.21.1907101904570.15468@sdf.lonestar.org> <1788e13e706b9fdaf610e4ddd671a5ed715f9dfe.camel@freebsd.org> <alpine.NEB.2.21.1907102043040.9461@sdf.lonestar.org> <AFF6488F-B2F5-486E-8F14-FAF852DB2C3C@yahoo.com> <1CB61FE0-5665-424F-8B94-ABFC06906112@yahoo.com> <alpine.NEB.2.21.1907111727500.16650@sdf.lonestar.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2019-07-11 at 17:50 +0000, adr wrote:
> > > > Curious about 32-bit arm stack alignment requirements in netbsd
> > > > (based on a FreeBSD thread making claims that user space allows
> > > > 4-byte stack alignment), I went looking around some in NetBSD
> 
> Whooow... I don't know what on earth I'm missing, or what I said that
> make you contact NetBSD developers talking about "claims".
> 
> Just write some ugly assembler:
> ======================================
>          .arch armv7-a
>          .syntax unified
>          .data
> str1:
>          .string "1-6: %d, %d, %d, %d, %d, %d\n"
>          .align
>          .text
>          .global main
> main:
>          push {r0} @ stack is not 8byte align anymore
>          mov r8, 10
> loop:
>          ldr r0, =str1
>          mov r1, 1
>          mov r2, 2
>          mov r3, 3
>          mov r4, 4
>          mov r5, 5
>          mov r6, 6
>          push { r4-r6 } @ alignment will change in the loop
>          bl printf
>          subs r8, r8, 1
>          bne loop
> end:
>          b end
> =====================================================
> as -a -o test.o test.s > test.l
> cc -o test test.o
> 
> And it works. In fact it works in FreeBSD with clang.
> But a more complex code, as a said before, calling
> SDL2 to use graphics works without any problem on NetBSD
> and Linux, but not on FreeBSD.
> 
> In fact I like that it doesn't work in FreeBSD, because
> that made me correct my code.
> 
> That is all I was saying, and now I'm going to just shut the * up.

Oh, so it's not that netbsd and linux have different stack alignment
requirements, it's just that you accidentally never called a function
with an unaligned stack where the misalignment caused a problem.  There
are only a few instructions that really require 64-bit data alignment
when the strict alignment enforcement flag is off (it's off in all 3
OSes we're talking about).  You could probably call most of the C
library functions and luck out on the alignment.

-- Ian




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0af96399f723a3e55e4c8d1f0e9926f0727f0bb3.camel>