From 25f04a68a168a948783618910e115316eb0ed3fc Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 11 Mar 2013 18:57:22 +0100 Subject: ape: threadsafe errno store errno on the private process stack so its always per process and not just per memory space. errno itself becomes a macro dereferencing int *_errnoloc; which is initialized from main9.s pointing to the private stack location. various fixes in programs that just imported errno variable with "extern int errno;" instead of including . --- sys/src/ape/lib/ap/arm/main9.s | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'sys/src/ape/lib/ap/arm/main9.s') diff --git a/sys/src/ape/lib/ap/arm/main9.s b/sys/src/ape/lib/ap/arm/main9.s index 9913ea59d..3e291ac61 100644 --- a/sys/src/ape/lib/ap/arm/main9.s +++ b/sys/src/ape/lib/ap/arm/main9.s @@ -5,16 +5,19 @@ sb=12 #define NPRIVATES 16 GLOBL _tos(SB), $4 +GLOBL _errnoloc(SB), $4 GLOBL _privates(SB), $4 GLOBL _nprivates(SB), $4 -TEXT _main(SB), 1, $(3*4+NPRIVATES*4) +TEXT _main(SB), 1, $(16+NPRIVATES*4) MOVW $setR12(SB), R(sb) /* _tos = arg */ MOVW R(arg), _tos(SB) - MOVW $private+8(SP), R1 + MOVW $errno+12(SP), R1 + MOVW R1, _errnoloc(SB) + MOVW $private+16(SP), R1 MOVW R1, _privates(SB) MOVW $NPRIVATES, R1 MOVW R1, _nprivates(SB) -- cgit v1.2.3