From 2c52881a85fc38a685b132043229d97e0bd9d376 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 26 Sep 2008 10:25:13 -0700 Subject: [PATCH] fix ELF bugs found by iant - .text begins at INITTEXT, not 0 and does not include HEADR - .shstrtab, .gosymtab, .gopclntab have alignment 1 - .gosymtab, .gopclntab have type SHT_PROGBITS R=r DELTA=9 (0 added, 0 deleted, 9 changed) OCL=15953 CL=15956 --- src/cmd/6l/asm.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cmd/6l/asm.c b/src/cmd/6l/asm.c index 8683228645..66aecad5a9 100644 --- a/src/cmd/6l/asm.c +++ b/src/cmd/6l/asm.c @@ -452,7 +452,7 @@ asmb(void) INITRND); /* alignment */ linuxphdr(0x6474e551, /* gok - type = gok */ - 1L+2L+4L, /* gok - flags = PF_X+PF_R */ + 1L+2L+4L, /* gok - flags = PF_X+PF_W+PF_R */ 0, /* file offset */ 0, /* vaddr */ 0, /* paddr */ @@ -472,9 +472,9 @@ asmb(void) 0); /* entsize */ stroffset = 1; /* 0 means no name, so start at 1 */ - fo = 0; - va = INITRND; - w = HEADR+textsize; + fo = HEADR; + va = (INITTEXT & ~((vlong)INITRND - 1)) + HEADR; + w = textsize; linuxshdr(".text", /* name */ 1, /* type */ @@ -527,7 +527,7 @@ asmb(void) w, /* size */ 0, /* link */ 0, /* info */ - 8, /* align */ + 1, /* align */ 0); /* entsize */ if (debug['s']) @@ -537,28 +537,28 @@ asmb(void) w = symsize; linuxshdr(".gosymtab", /* name */ - 7, /* type */ + 1, /* type 1 = SHT_PROGBITS */ 0, /* flags */ 0, /* addr */ fo, /* off */ w, /* size */ 0, /* link */ 0, /* info */ - 8, /* align */ + 1, /* align */ 24); /* entsize */ fo += w; w = lcsize; linuxshdr(".gopclntab", /* name */ - 7, /* type */ + 1, /* type 1 = SHT_PROGBITS*/ 0, /* flags */ 0, /* addr */ fo, /* off */ w, /* size */ 0, /* link */ 0, /* info */ - 8, /* align */ + 1, /* align */ 24); /* entsize */ break; } -- 2.48.1