diff options
author | Russ Cox <rsc@golang.org> | 2013-07-11 22:52:48 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2013-07-11 22:52:48 -0400 |
commit | 57fbfd5cf83bba1e773ef4b6f93506ee53a606de (patch) | |
tree | e520ef12c41a2920914b862a538552b1c9d10ccb /src/cmd/5l | |
parent | 7706ce42feadc8cea189117f369a38e0f5a03648 (diff) | |
download | go-57fbfd5cf83bba1e773ef4b6f93506ee53a606de.tar.gz |
cmd/ld: place read-only data in non-executable segment
R=golang-dev, dave, r
CC=golang-dev, nigeltao
https://codereview.appspot.com/10713043
Diffstat (limited to 'src/cmd/5l')
-rw-r--r-- | src/cmd/5l/asm.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 4a7729870..20ed5e5ae 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -550,13 +550,20 @@ asmb(void) sect = segtext.sect; cseek(sect->vaddr - segtext.vaddr + segtext.fileoff); codeblk(sect->vaddr, sect->len); - - /* output read-only data in text segment (rodata, gosymtab, pclntab, ...) */ for(sect = sect->next; sect != nil; sect = sect->next) { cseek(sect->vaddr - segtext.vaddr + segtext.fileoff); datblk(sect->vaddr, sect->len); } + if(segrodata.filelen > 0) { + if(debug['v']) + Bprint(&bso, "%5.2f rodatblk\n", cputime()); + Bflush(&bso); + + cseek(segrodata.fileoff); + datblk(segrodata.vaddr, segrodata.filelen); + } + if(debug['v']) Bprint(&bso, "%5.2f datblk\n", cputime()); Bflush(&bso); @@ -587,7 +594,7 @@ asmb(void) symo = HEADR+segtext.len+segdata.filelen; break; ElfSym: - symo = rnd(HEADR+segtext.filelen, INITRND)+segdata.filelen; + symo = rnd(HEADR+segtext.filelen, INITRND)+rnd(HEADR+segrodata.filelen, INITRND)+segdata.filelen; symo = rnd(symo, INITRND); break; } |