Commit 88f84b3e authored by Rémy Oudompheng's avatar Rémy Oudompheng

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
parent fed5428c
...@@ -139,9 +139,18 @@ linknew(LinkArch *arch) ...@@ -139,9 +139,18 @@ linknew(LinkArch *arch)
*/ */
ctxt->tlsoffset = -2*ctxt->arch->ptrsize; ctxt->tlsoffset = -2*ctxt->arch->ptrsize;
break; break;
case Hnacl: 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; break;
case Hdarwin: case Hdarwin:
......
...@@ -21,7 +21,7 @@ runtime·memhash(uintptr *h, uintptr s, void *a) ...@@ -21,7 +21,7 @@ runtime·memhash(uintptr *h, uintptr s, void *a)
{ {
byte *b; byte *b;
uintptr hash; uintptr hash;
if(use_aeshash) { if(!NaCl && use_aeshash) {
runtime·aeshash(h, s, a); runtime·aeshash(h, s, a);
return; return;
} }
...@@ -470,6 +470,9 @@ byte runtime·aeskeysched[HashRandomBytes]; ...@@ -470,6 +470,9 @@ byte runtime·aeskeysched[HashRandomBytes];
void void
runtime·hashinit(void) runtime·hashinit(void)
{ {
if(NaCl)
return;
// Install aes hash algorithm if we have the instructions we need // Install aes hash algorithm if we have the instructions we need
if((runtime·cpuid_ecx & (1 << 25)) != 0 && // aes (aesenc) if((runtime·cpuid_ecx & (1 << 25)) != 0 && // aes (aesenc)
(runtime·cpuid_ecx & (1 << 9)) != 0 && // sse3 (pshufb) (runtime·cpuid_ecx & (1 << 9)) != 0 && // sse3 (pshufb)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment