liblink, runtime: make nacl/386 binaries valid.

They were rejected by NaCl due to AES instructions and
accesses to %gs:0x8, caused by wrong tlsoffset value.

LGTM=iant
R=rsc, dave, iant
CC=golang-codereviews
https://golang.org/cl/76050044
diff --git a/src/liblink/sym.c b/src/liblink/sym.c
index 0c7aae0..3990f72 100644
--- a/src/liblink/sym.c
+++ b/src/liblink/sym.c
@@ -139,9 +139,18 @@
 		 */
 		ctxt->tlsoffset = -2*ctxt->arch->ptrsize;
 		break;
-	
+
 	case Hnacl:
-		ctxt->tlsoffset = 0;
+		switch(ctxt->arch->thechar) {
+		default:
+			sysfatal("unknown thread-local storage offset for nacl/%s", ctxt->arch->name);
+		case '6':
+			ctxt->tlsoffset = 0;
+			break;
+		case '8':
+			ctxt->tlsoffset = -8;
+			break;
+		}
 		break;
 
 	case Hdarwin:
diff --git a/src/pkg/runtime/alg.goc b/src/pkg/runtime/alg.goc
index 81eb166..9fb54ca 100644
--- a/src/pkg/runtime/alg.goc
+++ b/src/pkg/runtime/alg.goc
@@ -21,7 +21,7 @@
 {
 	byte *b;
 	uintptr hash;
-	if(use_aeshash) {
+	if(!NaCl && use_aeshash) {
 		runtime·aeshash(h, s, a);
 		return;
 	}
@@ -470,6 +470,9 @@
 void
 runtime·hashinit(void)
 {
+        if(NaCl)
+                return;
+
 	// Install aes hash algorithm if we have the instructions we need
 	if((runtime·cpuid_ecx & (1 << 25)) != 0 &&  // aes (aesenc)
 	   (runtime·cpuid_ecx & (1 << 9)) != 0 &&   // sse3 (pshufb)