From: Rémy Oudompheng Date: Fri, 14 Mar 2014 20:33:55 +0000 (+0100) Subject: liblink, runtime: make nacl/386 binaries valid. X-Git-Tag: go1.3beta1~351 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=88f84b3e415ad226f9724dc486be0f1b363b9f05;p=gostls13.git 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 0c7aae00a1..3990f7200e 100644 --- a/src/liblink/sym.c +++ b/src/liblink/sym.c @@ -139,9 +139,18 @@ linknew(LinkArch *arch) */ 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 81eb1664a9..9fb54cac3f 100644 --- a/src/pkg/runtime/alg.goc +++ b/src/pkg/runtime/alg.goc @@ -21,7 +21,7 @@ runtime·memhash(uintptr *h, uintptr s, void *a) { byte *b; uintptr hash; - if(use_aeshash) { + if(!NaCl && use_aeshash) { runtime·aeshash(h, s, a); return; } @@ -470,6 +470,9 @@ byte runtime·aeskeysched[HashRandomBytes]; 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)