| ... | @@ -56,6 +56,30 @@ pub const global_symbol_bit: u32 = 0x80000000; | ... | @@ -56,6 +56,30 @@ pub const global_symbol_bit: u32 = 0x80000000; |
| 56 | pub const symbol_mask: u32 = 0x7fffffff; | 56 | pub const symbol_mask: u32 = 0x7fffffff; |
| 57 | pub const SHN_ATOM: u16 = 0x100; | 57 | pub const SHN_ATOM: u16 = 0x100; |
| 58 | | 58 | |
| | 59 | pub fn init(self: *ZigObject, elf_file: *Elf) !void { |
| | 60 | const gpa = elf_file.base.allocator; |
| | 61 | |
| | 62 | try self.atoms.append(gpa, 0); // null input section |
| | 63 | |
| | 64 | const name_off = try elf_file.strtab.insert(gpa, std.fs.path.stem(self.path)); |
| | 65 | const symbol_index = try elf_file.addSymbol(); |
| | 66 | try self.local_symbols.append(gpa, symbol_index); |
| | 67 | const symbol_ptr = elf_file.symbol(symbol_index); |
| | 68 | symbol_ptr.file_index = self.index; |
| | 69 | symbol_ptr.name_offset = name_off; |
| | 70 | |
| | 71 | const esym_index = try self.addLocalEsym(gpa); |
| | 72 | const esym = &self.local_esyms.items(.elf_sym)[esym_index]; |
| | 73 | esym.st_name = name_off; |
| | 74 | esym.st_info |= elf.STT_FILE; |
| | 75 | esym.st_shndx = elf.SHN_ABS; |
| | 76 | symbol_ptr.esym_index = esym_index; |
| | 77 | |
| | 78 | if (!elf_file.base.options.strip) { |
| | 79 | self.dwarf = Dwarf.init(gpa, &elf_file.base, .dwarf32); |
| | 80 | } |
| | 81 | } |
| | 82 | |
| 59 | pub fn deinit(self: *ZigObject, allocator: Allocator) void { | 83 | pub fn deinit(self: *ZigObject, allocator: Allocator) void { |
| 60 | self.local_esyms.deinit(allocator); | 84 | self.local_esyms.deinit(allocator); |
| 61 | self.global_esyms.deinit(allocator); | 85 | self.global_esyms.deinit(allocator); |
| ... | @@ -119,7 +143,6 @@ pub fn addGlobalEsym(self: *ZigObject, allocator: Allocator) !Symbol.Index { | ... | @@ -119,7 +143,6 @@ pub fn addGlobalEsym(self: *ZigObject, allocator: Allocator) !Symbol.Index { |
| 119 | | 143 | |
| 120 | pub fn addAtom(self: *ZigObject, elf_file: *Elf) !Symbol.Index { | 144 | pub fn addAtom(self: *ZigObject, elf_file: *Elf) !Symbol.Index { |
| 121 | const gpa = elf_file.base.allocator; | 145 | const gpa = elf_file.base.allocator; |
| 122 | | | |
| 123 | const atom_index = try elf_file.addAtom(); | 146 | const atom_index = try elf_file.addAtom(); |
| 124 | const symbol_index = try elf_file.addSymbol(); | 147 | const symbol_index = try elf_file.addSymbol(); |
| 125 | const esym_index = try self.addLocalEsym(gpa); | 148 | const esym_index = try self.addLocalEsym(gpa); |