]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: more Native Client fixes
authorDave Cheney <dave@cheney.net>
Tue, 11 Mar 2014 03:43:10 +0000 (14:43 +1100)
committerDave Cheney <dave@cheney.net>
Tue, 11 Mar 2014 03:43:10 +0000 (14:43 +1100)
Thanks to Ian for spotting these.

runtime.h: define uintreg correctly.
stack.c: address warning caused by the type of uintreg being 32 bits on amd64p32.

Commentary (mainly for my own use)

nacl/amd64p32 defines a machine with 64bit registers, but address space is limited to a 4gb window (the window is placed randomly inside the full 48 bit virtual address space of a process). To cope with this 6c defines _64BIT and _64BITREG.

_64BITREG is always defined by 6c, so both GOARCH=amd64 and GOARCH=amd64p32 use 64bit wide registers.

However _64BIT itself is only defined when 6c is compiling for amd64 targets. The definition is elided for amd64p32 environments causing int, uint and other arch specific types to revert to their 32bit definitions.

LGTM=iant
R=iant, rsc, remyoudompheng
CC=golang-codereviews
https://golang.org/cl/72860046

src/pkg/runtime/runtime.h
src/pkg/runtime/stack.c

index 716071eb83f98658069b54777072452097f68d15..0682a8026aa9e590e104a957ecac43c4c518d306 100644 (file)
@@ -21,19 +21,17 @@ typedef     uint64          uintptr;
 typedef        int64           intptr;
 typedef        int64           intgo; // Go's int
 typedef        uint64          uintgo; // Go's uint
-typedef        uint64          uintreg;
 #else
 typedef        uint32          uintptr;
 typedef        int32           intptr;
 typedef        int32           intgo; // Go's int
 typedef        uint32          uintgo; // Go's uint
-typedef        uint32          uintreg;
 #endif
 
 #ifdef _64BITREG
-//typedef      uint64          uintreg;
+typedef        uint64          uintreg;
 #else
-//typedef      uint32          uintreg;
+typedef        uint32          uintreg;
 #endif
 
 /*
index ead9ba59c1f20c07533f285ec519e5754afdc431..4d699f1101ac0c68f1686228344f58f4bf3d511e 100644 (file)
@@ -187,7 +187,7 @@ runtime·oldstack(void)
 
        if(StackDebug >= 1) {
                runtime·printf("runtime: oldstack gobuf={pc:%p sp:%p lr:%p} cret=%p argsize=%p\n",
-                       top->gobuf.pc, top->gobuf.sp, top->gobuf.lr, m->cret, (uintptr)argsize);
+                       top->gobuf.pc, top->gobuf.sp, top->gobuf.lr, (uintptr)m->cret, (uintptr)argsize);
        }
 
        // gp->status is usually Grunning, but it could be Gsyscall if a stack split