--- /sys/src/cmd/ld/elf.c
+++ /sys/src/cmd/ld/elf.c
@@ -78,12 +78,14 @@ static void
elf32sectab(void (*putl)(long))
{
seek(cout, HEADR+textsize+datsize+symsize, 0);
+ elf32shdr(putl, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0);
elf32shdr(putl, Stitext, Progbits, Salloc|Sexec, INITTEXT,
- HEADR, textsize, 0, 0, 0x10000, 0);
+ HEADR, textsize, 0, 0, INITRND, 0);
elf32shdr(putl, Stidata, Progbits, Salloc|Swrite, INITDAT,
- HEADR+textsize, datsize, 0, 0, 0x10000, 0);
+ HEADR+textsize, datsize, 0, 0, INITRND, 0);
elf32shdr(putl, Stistrtab, Strtab, 1 << 5, 0,
- HEADR+textsize+datsize+symsize+3*Shdr32sz, 14, 0, 0, 1, 0);
+ HEADR+textsize+datsize+symsize+4*Shdr32sz, 22, 0, 0, 1, 0);
elfstrtab();
}
@@ -122,8 +124,8 @@ elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl))
putw(3 + addpsects); /* # of Phdrs */
putw(Shdr32sz);
if(debug['S']){
- putw(3); /* # of Shdrs */
- putw(2); /* Shdr table index */
+ putw(4); /* # of Shdrs */
+ putw(3); /* Shdr table index */
}else{
putw(0);
putw(0);
@@ -193,12 +195,14 @@ static void
elf64sectab(void (*putl)(long), void (*putll)(vlong))
{
seek(cout, HEADR+textsize+datsize+symsize, 0);
+ elf64shdr(putl, putll, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0);
elf64shdr(putl, putll, Stitext, Progbits, Salloc|Sexec, INITTEXT,
- HEADR, textsize, 0, 0, 0x10000, 0);
+ HEADR, textsize, 0, 0, INITRND, 0);
elf64shdr(putl, putll, Stidata, Progbits, Salloc|Swrite, INITDAT,
- HEADR+textsize, datsize, 0, 0, 0x10000, 0);
+ HEADR+textsize, datsize, 0, 0, INITRND, 0);
elf64shdr(putl, putll, Stistrtab, Strtab, 1 << 5, 0,
- HEADR+textsize+datsize+symsize+3*Shdr64sz, 14, 0, 0, 1, 0);
+ HEADR+textsize+datsize+symsize+4*Shdr64sz, 22, 0, 0, 1, 0);
elfstrtab();
}
@@ -240,8 +244,8 @@ elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl))
putw(3 + addpsects); /* # of Phdrs */
putw(Shdr64sz);
if(debug['S']){
- putw(3); /* # of Shdrs */
- putw(2); /* Shdr table index */
+ putw(4); /* # of Shdrs */
+ putw(3); /* Shdr table index */
}else{
putw(0);
putw(0);
|