summaryrefslogtreecommitdiff
path: root/src/cmd/6l
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-07-11 22:52:48 -0400
committerRuss Cox <rsc@golang.org>2013-07-11 22:52:48 -0400
commit57fbfd5cf83bba1e773ef4b6f93506ee53a606de (patch)
treee520ef12c41a2920914b862a538552b1c9d10ccb /src/cmd/6l
parent7706ce42feadc8cea189117f369a38e0f5a03648 (diff)
downloadgo-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/6l')
-rw-r--r--src/cmd/6l/asm.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cmd/6l/asm.c b/src/cmd/6l/asm.c
index 8807a6ed5..81a16bc6a 100644
--- a/src/cmd/6l/asm.c
+++ b/src/cmd/6l/asm.c
@@ -625,13 +625,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);
@@ -696,7 +703,7 @@ asmb(void)
case Hfreebsd:
case Hnetbsd:
case Hopenbsd:
- symo = rnd(HEADR+segtext.len, INITRND)+segdata.filelen;
+ symo = rnd(HEADR+segtext.len, INITRND)+rnd(segrodata.len, INITRND)+segdata.filelen;
symo = rnd(symo, INITRND);
break;
case Hwindows: