authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-14 00:57:06+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-16 19:33:05+02:00
log315cd7623eccdbce009845083b708f1c9bb6c672
tree4f1e4b95333282b3d4c88b52553575e2598ee827
parent5fad6837919c683b48d11987e55948b7f25d67cd

elf: fix section sorting logic


1 files changed, 14 insertions(+), 14 deletions(-)

src/link/Elf.zig+14-14
......@@ -4081,26 +4081,26 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
40814081 elf.SHT_PROGBITS => {
40824082 assert(flags & elf.SHF_ALLOC != 0);
40834083 if (flags & elf.SHF_EXECINSTR != 0) {
4084 return 0xe1;
4084 return 0x2;
40854085 } else if (flags & elf.SHF_WRITE != 0) {
4086 return 0xe2;
4086 return 0x3;
40874087 } else {
4088 return 0xe0;
4088 return 0x1;
40894089 }
40904090 },
4091 elf.SHT_NOBITS => return 0xef,
4091 elf.SHT_NOBITS => return 0xf,
40924092 else => unreachable,
40934093 }
40944094 }
40954095
40964096 switch (shdr.sh_type) {
4097 elf.SHT_NULL => return 0,
4098 elf.SHT_DYNSYM => return 2,
4099 elf.SHT_HASH => return 3,
4100 elf.SHT_GNU_HASH => return 3,
4101 elf.SHT_GNU_VERSYM => return 4,
4102 elf.SHT_GNU_VERDEF => return 4,
4103 elf.SHT_GNU_VERNEED => return 4,
4097 elf.SHT_NULL => return 0x0,
4098 elf.SHT_DYNSYM => return 0x12,
4099 elf.SHT_HASH => return 0x13,
4100 elf.SHT_GNU_HASH => return 0x13,
4101 elf.SHT_GNU_VERSYM => return 0x14,
4102 elf.SHT_GNU_VERDEF => return 0x14,
4103 elf.SHT_GNU_VERNEED => return 0x14,
41044104
41054105 elf.SHT_PREINIT_ARRAY,
41064106 elf.SHT_INIT_ARRAY,
......@@ -4109,7 +4109,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
41094109
41104110 elf.SHT_DYNAMIC => return 0xf3,
41114111
4112 elf.SHT_RELA => return 0xf,
4112 elf.SHT_RELA => return 0x1f,
41134113
41144114 elf.SHT_PROGBITS => if (flags & elf.SHF_ALLOC != 0) {
41154115 if (flags & elf.SHF_EXECINSTR != 0) {
......@@ -4117,7 +4117,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
41174117 } else if (flags & elf.SHF_WRITE != 0) {
41184118 return if (flags & elf.SHF_TLS != 0) 0xf4 else 0xf6;
41194119 } else if (mem.eql(u8, name, ".interp")) {
4120 return 1;
4120 return 0x11;
41214121 } else {
41224122 return 0xf0;
41234123 }
......@@ -4131,7 +4131,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
41314131
41324132 elf.SHT_NOBITS => return if (flags & elf.SHF_TLS != 0) 0xf5 else 0xf7,
41334133 elf.SHT_SYMTAB => return 0xfa,
4134 elf.SHT_STRTAB => return if (mem.eql(u8, name, ".dynstr")) 4 else 0xfb,
4134 elf.SHT_STRTAB => return if (mem.eql(u8, name, ".dynstr")) 0x14 else 0xfb,
41354135 else => return 0xff,
41364136 }
41374137}