1
0
mirror of https://github.com/golang/go synced 2024-11-21 20:54:45 -07:00

Pad Go symbol table out to page boundary when linking dynamically.

This avoids a crash when using cgo where glibc's malloc thinks
that it can use some of the memory following the symbol table.
This fails because the symbol table is mapped read-only, which
affects the whole page.

R=rsc
CC=golang-dev
https://golang.org/cl/1616042
This commit is contained in:
Ian Lance Taylor 2010-06-11 13:41:49 -07:00
parent c1e20720f7
commit fe43325b30
3 changed files with 11 additions and 7 deletions

View File

@ -532,6 +532,8 @@ asmb(void)
asmthumbmap();
if(dlm)
asmdyn();
if(!debug['s'])
strnput("", INITRND-(8+symsize+lcsize)%INITRND);
cflush();
seek(cout, symo, 0);
lputl(symsize);
@ -679,8 +681,8 @@ asmb(void)
ph->off = symo;
ph->vaddr = symdatva;
ph->paddr = symdatva;
ph->filesz = 8+symsize+lcsize;
ph->memsz = 8+symsize+lcsize;
ph->filesz = rnd(8+symsize+lcsize, INITRND);
ph->memsz = rnd(8+symsize+lcsize, INITRND);
ph->align = INITRND;
}

View File

@ -620,6 +620,8 @@ asmb(void)
asmlc();
if(dlm)
asmdyn();
if(!debug['s'])
strnput("", INITRND-(8+symsize+lcsize)%INITRND);
cflush();
seek(cout, symo, 0);
lputl(symsize);
@ -753,8 +755,8 @@ asmb(void)
ph->off = symo;
ph->vaddr = symdatva;
ph->paddr = symdatva;
ph->filesz = 8+symsize+lcsize;
ph->memsz = 8+symsize+lcsize;
ph->filesz = rnd(8+symsize+lcsize, INITRND);
ph->memsz = rnd(8+symsize+lcsize, INITRND);
ph->align = INITRND;
}

View File

@ -642,7 +642,7 @@ asmb(void)
asmlc();
if(dlm)
asmdyn();
if(HEADTYPE == 10)
if(HEADTYPE == 10 || (iself && !debug['s']))
strnput("", INITRND-(8+symsize+lcsize)%INITRND);
cflush();
seek(cout, symo, 0);
@ -884,8 +884,8 @@ asmb(void)
ph->off = symo;
ph->vaddr = symdatva;
ph->paddr = symdatva;
ph->filesz = 8+symsize+lcsize;
ph->memsz = 8+symsize+lcsize;
ph->filesz = rnd(8+symsize+lcsize, INITRND);
ph->memsz = rnd(8+symsize+lcsize, INITRND);
ph->align = INITRND;
}