Thread (19 messages) 19 messages, 3 authors, 2016-12-01

[RFC PATCH v2 4/8] arm64: compat: Add a 32-bit vDSO

flat view
DORMANTno replies

From: Kevin Brodsky <hidden>
Date: 2016-12-01 14:27:40

On 21/11/16 18:44, Catalin Marinas wrote:
On Mon, Nov 21, 2016 at 03:45:55PM +0000, Kevin Brodsky wrote:
quoted
On 04/11/16 20:03, Catalin Marinas wrote:
quoted
On Fri, Oct 28, 2016 at 11:20:07AM +0100, Kevin Brodsky wrote:
quoted
On 28/10/16 04:09, Jisheng Zhang wrote:
quoted
On Thu, 27 Oct 2016 17:30:54 +0100 Kevin Brodsky wrote:
quoted
+# Force -O2 to avoid libgcc dependencies
+VDSO_CFLAGS := -march=armv8-a -O2
For completeness, bringing 32bit compiler need to check whether the 32bit
toolchain support some options. IIRC, armv8-a support isn't enabled until
gcc 4.8, so old toolchains such gcc-4.7 will complain:
   error: unrecognized argument in option ?-march=armv8-a?
That's a fair point. I guess -march=armv8-a is not strictly necessary and
the produced vDSO should be fine if arch/arm/vdso also compiles fine.
However we would still need to pass -march=armv7-a. I'm not sure what to do
between:
* Checking that the compiler supports -march=armv8-a when inspecting
CROSS_COMPILE_ARM32, and if it doesn't vdso32 will not be built.
* Checking whether -march=armv8-a is available here, and if it is not fall
back to -march=armv7-a.
Does v8 vs v7 make any difference in the generated code? If not, we
could just stick to armv7-a permanently.
I've just tried compiling with -march=armv7-a, and in fact it doesn't
compile at all. It turns out vgettimeofday.c uses smp_rmb(), which expands
to dmb ishld on arm64, and ishld doesn't exist in ARMv7. We could possibly
work around that, but I think requiring GCC 4.8 is reasonable.
Since vgettimeofday.c is meant to be compiled for AArch32, it wouldn't
look too bad to define its own barriers rather than relying on the
AArch64 ones. So you could define v7_smp_rmb/v7_smp_wmb and use them in
this file. Alternatively, replace smp_rmb() with smp_mb() in this file
but with a big comment about ARMv7 compilation requirement and "ishld"
not being available.
Fair enough. I'll add AArch32 barrier macros and compile with -march=armv7-a if the 
compiler doesn't support armv8-a. It's true that using arm64 barrier macros in 32-bit 
code is a bit dodgy anyway.

Cheers,
Kevin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help