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 {...@@ -4081,26 +4081,26 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
4081 elf.SHT_PROGBITS => {4081 elf.SHT_PROGBITS => {
4082 assert(flags & elf.SHF_ALLOC != 0);4082 assert(flags & elf.SHF_ALLOC != 0);
4083 if (flags & elf.SHF_EXECINSTR != 0) {4083 if (flags & elf.SHF_EXECINSTR != 0) {
4084 return 0xe1;4084 return 0x2;
4085 } else if (flags & elf.SHF_WRITE != 0) {4085 } else if (flags & elf.SHF_WRITE != 0) {
4086 return 0xe2;4086 return 0x3;
4087 } else {4087 } else {
4088 return 0xe0;4088 return 0x1;
4089 }4089 }
4090 },4090 },
4091 elf.SHT_NOBITS => return 0xef,4091 elf.SHT_NOBITS => return 0xf,
4092 else => unreachable,4092 else => unreachable,
4093 }4093 }
4094 }4094 }
40954095
4096 switch (shdr.sh_type) {4096 switch (shdr.sh_type) {
4097 elf.SHT_NULL => return 0,4097 elf.SHT_NULL => return 0x0,
4098 elf.SHT_DYNSYM => return 2,4098 elf.SHT_DYNSYM => return 0x12,
4099 elf.SHT_HASH => return 3,4099 elf.SHT_HASH => return 0x13,
4100 elf.SHT_GNU_HASH => return 3,4100 elf.SHT_GNU_HASH => return 0x13,
4101 elf.SHT_GNU_VERSYM => return 4,4101 elf.SHT_GNU_VERSYM => return 0x14,
4102 elf.SHT_GNU_VERDEF => return 4,4102 elf.SHT_GNU_VERDEF => return 0x14,
4103 elf.SHT_GNU_VERNEED => return 4,4103 elf.SHT_GNU_VERNEED => return 0x14,
41044104
4105 elf.SHT_PREINIT_ARRAY,4105 elf.SHT_PREINIT_ARRAY,
4106 elf.SHT_INIT_ARRAY,4106 elf.SHT_INIT_ARRAY,
...@@ -4109,7 +4109,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {...@@ -4109,7 +4109,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
41094109
4110 elf.SHT_DYNAMIC => return 0xf3,4110 elf.SHT_DYNAMIC => return 0xf3,
41114111
4112 elf.SHT_RELA => return 0xf,4112 elf.SHT_RELA => return 0x1f,
41134113
4114 elf.SHT_PROGBITS => if (flags & elf.SHF_ALLOC != 0) {4114 elf.SHT_PROGBITS => if (flags & elf.SHF_ALLOC != 0) {
4115 if (flags & elf.SHF_EXECINSTR != 0) {4115 if (flags & elf.SHF_EXECINSTR != 0) {
...@@ -4117,7 +4117,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {...@@ -4117,7 +4117,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
4117 } else if (flags & elf.SHF_WRITE != 0) {4117 } else if (flags & elf.SHF_WRITE != 0) {
4118 return if (flags & elf.SHF_TLS != 0) 0xf4 else 0xf6;4118 return if (flags & elf.SHF_TLS != 0) 0xf4 else 0xf6;
4119 } else if (mem.eql(u8, name, ".interp")) {4119 } else if (mem.eql(u8, name, ".interp")) {
4120 return 1;4120 return 0x11;
4121 } else {4121 } else {
4122 return 0xf0;4122 return 0xf0;
4123 }4123 }
...@@ -4131,7 +4131,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {...@@ -4131,7 +4131,7 @@ fn sectionRank(self: *Elf, shndx: u16) u8 {
41314131
4132 elf.SHT_NOBITS => return if (flags & elf.SHF_TLS != 0) 0xf5 else 0xf7,4132 elf.SHT_NOBITS => return if (flags & elf.SHF_TLS != 0) 0xf5 else 0xf7,
4133 elf.SHT_SYMTAB => return 0xfa,4133 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,
4135 else => return 0xff,4135 else => return 0xff,
4136 }4136 }
4137}4137}