Skip to content

Commit 3f37b69

Browse files
committed
downstream changes
1 parent 6047e57 commit 3f37b69

File tree

18 files changed

+812
-865
lines changed

18 files changed

+812
-865
lines changed

lib/compiler/aro/backend/Object/Elf.zig

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const Section = struct {
77
data: std.ArrayList(u8),
88
relocations: std.ArrayListUnmanaged(Relocation) = .empty,
99
flags: u64,
10-
type: u32,
11-
index: u16 = undefined,
10+
type: std.elf.SHT,
11+
index: std.elf.SHN = undefined,
1212
};
1313

1414
const Symbol = struct {
@@ -86,7 +86,7 @@ pub fn getSection(elf: *Elf, section_kind: Object.Section) !*std.ArrayList(u8) {
8686
const section = try elf.arena.allocator().create(Section);
8787
section.* = .{
8888
.data = std.ArrayList(u8).init(elf.arena.child_allocator),
89-
.type = std.elf.SHT_PROGBITS,
89+
.type = .PROGBITS,
9090
.flags = switch (section_kind) {
9191
.func, .custom => std.elf.SHF_ALLOC + std.elf.SHF_EXECINSTR,
9292
.strings => std.elf.SHF_ALLOC + std.elf.SHF_MERGE + std.elf.SHF_STRINGS,
@@ -116,16 +116,16 @@ pub fn declareSymbol(
116116
const section_name = sectionString(section_kind);
117117
break :blk elf.sections.get(section_name);
118118
};
119-
const binding: u8 = switch (linkage) {
120-
.Internal => std.elf.STB_LOCAL,
121-
.Strong => std.elf.STB_GLOBAL,
122-
.Weak => std.elf.STB_WEAK,
119+
const binding: std.elf.STB = switch (linkage) {
120+
.Internal => .LOCAL,
121+
.Strong => .GLOBAL,
122+
.Weak => .WEAK,
123123
.LinkOnce => unreachable,
124124
};
125-
const sym_type: u8 = switch (@"type") {
126-
.func => std.elf.STT_FUNC,
127-
.variable => std.elf.STT_OBJECT,
128-
.external => std.elf.STT_NOTYPE,
125+
const sym_type: std.elf.STT = switch (@"type") {
126+
.func => .FUNC,
127+
.variable => .OBJECT,
128+
.external => .NOTYPE,
129129
};
130130
const name = if (maybe_name) |some| some else blk: {
131131
defer elf.unnamed_symbol_mangle += 1;
@@ -174,29 +174,29 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
174174
var buf_writer = std.io.bufferedWriter(file.writer());
175175
const w = buf_writer.writer();
176176

177-
var num_sections: std.elf.Elf64_Half = additional_sections;
178-
var relocations_len: std.elf.Elf64_Off = 0;
179-
var sections_len: std.elf.Elf64_Off = 0;
177+
var num_sections: std.elf.Half = additional_sections;
178+
var relocations_len: std.elf.elf64.Off = 0;
179+
var sections_len: std.elf.elf64.Off = 0;
180180
{
181181
var it = elf.sections.valueIterator();
182182
while (it.next()) |sect| {
183183
sections_len += sect.*.data.items.len;
184-
relocations_len += sect.*.relocations.items.len * @sizeOf(std.elf.Elf64_Rela);
185-
sect.*.index = num_sections;
184+
relocations_len += sect.*.relocations.items.len * @sizeOf(std.elf.elf64.Rela);
185+
sect.*.index = @enumFromInt(num_sections);
186186
num_sections += 1;
187187
num_sections += @intFromBool(sect.*.relocations.items.len != 0);
188188
}
189189
}
190-
const symtab_len = (elf.local_symbols.count() + elf.global_symbols.count() + 1) * @sizeOf(std.elf.Elf64_Sym);
190+
const symtab_len = (elf.local_symbols.count() + elf.global_symbols.count() + 1) * @sizeOf(std.elf.elf64.Sym);
191191

192-
const symtab_offset = @sizeOf(std.elf.Elf64_Ehdr) + sections_len;
192+
const symtab_offset = @sizeOf(std.elf.elf64.Ehdr) + sections_len;
193193
const symtab_offset_aligned = std.mem.alignForward(u64, symtab_offset, 8);
194194
const rela_offset = symtab_offset_aligned + symtab_len;
195195
const strtab_offset = rela_offset + relocations_len;
196196
const sh_offset = strtab_offset + elf.strtab_len;
197197
const sh_offset_aligned = std.mem.alignForward(u64, sh_offset, 16);
198198

199-
const elf_header = std.elf.Elf64_Ehdr{
199+
const elf_header = std.elf.elf64.Ehdr{
200200
.e_ident = .{ 0x7F, 'E', 'L', 'F', 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
201201
.e_type = std.elf.ET.REL, // we only produce relocatables
202202
.e_machine = elf.obj.target.toElfMachine(),
@@ -205,10 +205,10 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
205205
.e_phoff = 0, // no program header
206206
.e_shoff = sh_offset_aligned, // section headers offset
207207
.e_flags = 0, // no flags
208-
.e_ehsize = @sizeOf(std.elf.Elf64_Ehdr),
208+
.e_ehsize = @sizeOf(std.elf.elf64.Ehdr),
209209
.e_phentsize = 0, // no program header
210210
.e_phnum = 0, // no program header
211-
.e_shentsize = @sizeOf(std.elf.Elf64_Shdr),
211+
.e_shentsize = @sizeOf(std.elf.elf64.Shdr),
212212
.e_shnum = num_sections,
213213
.e_shstrndx = strtab_index,
214214
};
@@ -227,36 +227,36 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
227227
// write symbols
228228
{
229229
// first symbol must be null
230-
try w.writeStruct(std.mem.zeroes(std.elf.Elf64_Sym));
230+
try w.writeStruct(std.mem.zeroes(std.elf.elf64.Sym));
231231

232232
var sym_index: u16 = 1;
233233
var it = elf.local_symbols.iterator();
234234
while (it.next()) |entry| {
235235
const sym = entry.value_ptr.*;
236-
try w.writeStruct(std.elf.Elf64_Sym{
236+
try w.writeStruct(std.elf.elf64.Sym{
237237
.st_name = name_offset,
238238
.st_info = sym.info,
239239
.st_other = 0,
240240
.st_shndx = if (sym.section) |some| some.index else 0,
241241
.st_value = sym.offset,
242242
.st_size = sym.size,
243243
});
244-
sym.index = sym_index;
244+
sym.index = @enumFromInt(sym_index);
245245
sym_index += 1;
246246
name_offset += @intCast(entry.key_ptr.len + 1); // +1 for null byte
247247
}
248248
it = elf.global_symbols.iterator();
249249
while (it.next()) |entry| {
250250
const sym = entry.value_ptr.*;
251-
try w.writeStruct(std.elf.Elf64_Sym{
251+
try w.writeStruct(std.elf.elf64.Sym{
252252
.st_name = name_offset,
253253
.st_info = sym.info,
254254
.st_other = 0,
255255
.st_shndx = if (sym.section) |some| some.index else 0,
256256
.st_value = sym.offset,
257257
.st_size = sym.size,
258258
});
259-
sym.index = sym_index;
259+
sym.index = @enumFromInt(sym_index);
260260
sym_index += 1;
261261
name_offset += @intCast(entry.key_ptr.len + 1); // +1 for null byte
262262
}
@@ -267,7 +267,7 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
267267
var it = elf.sections.valueIterator();
268268
while (it.next()) |sect| {
269269
for (sect.*.relocations.items) |rela| {
270-
try w.writeStruct(std.elf.Elf64_Rela{
270+
try w.writeStruct(std.elf.elf64.Rela{
271271
.r_offset = rela.offset,
272272
.r_addend = rela.addend,
273273
.r_info = (@as(u64, rela.symbol.index) << 32) | rela.type,
@@ -295,13 +295,13 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
295295
// pad to 16 bytes
296296
try w.writeByteNTimes(0, @intCast(sh_offset_aligned - sh_offset));
297297
// mandatory null header
298-
try w.writeStruct(std.mem.zeroes(std.elf.Elf64_Shdr));
298+
try w.writeStruct(std.mem.zeroes(std.elf.elf64.Shdr));
299299

300300
// write strtab section header
301301
{
302-
const sect_header = std.elf.Elf64_Shdr{
302+
const sect_header = std.elf.elf64.Shdr{
303303
.sh_name = strtab_name,
304-
.sh_type = std.elf.SHT_STRTAB,
304+
.sh_type = .STRTAB,
305305
.sh_flags = 0,
306306
.sh_addr = 0,
307307
.sh_offset = strtab_offset,
@@ -316,31 +316,31 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
316316

317317
// write symtab section header
318318
{
319-
const sect_header = std.elf.Elf64_Shdr{
319+
const sect_header = std.elf.elf64.Shdr{
320320
.sh_name = symtab_name,
321-
.sh_type = std.elf.SHT_SYMTAB,
321+
.sh_type = .SYMTAB,
322322
.sh_flags = 0,
323323
.sh_addr = 0,
324324
.sh_offset = symtab_offset_aligned,
325325
.sh_size = symtab_len,
326326
.sh_link = strtab_index,
327327
.sh_info = elf.local_symbols.size + 1,
328328
.sh_addralign = 8,
329-
.sh_entsize = @sizeOf(std.elf.Elf64_Sym),
329+
.sh_entsize = @sizeOf(std.elf.elf64.Sym),
330330
};
331331
try w.writeStruct(sect_header);
332332
}
333333

334334
// remaining section headers
335335
{
336-
var sect_offset: u64 = @sizeOf(std.elf.Elf64_Ehdr);
336+
var sect_offset: u64 = @sizeOf(std.elf.elf64.Ehdr);
337337
var rela_sect_offset: u64 = rela_offset;
338338
var it = elf.sections.iterator();
339339
while (it.next()) |entry| {
340340
const sect = entry.value_ptr.*;
341341
const rela_count = sect.relocations.items.len;
342342
const rela_name_offset: u32 = if (rela_count != 0) @truncate(".rela".len) else 0;
343-
try w.writeStruct(std.elf.Elf64_Shdr{
343+
try w.writeStruct(std.elf.elf64.Shdr{
344344
.sh_name = rela_name_offset + name_offset,
345345
.sh_type = sect.type,
346346
.sh_flags = sect.flags,
@@ -354,18 +354,18 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
354354
});
355355

356356
if (rela_count != 0) {
357-
const size = rela_count * @sizeOf(std.elf.Elf64_Rela);
358-
try w.writeStruct(std.elf.Elf64_Shdr{
357+
const size = rela_count * @sizeOf(std.elf.elf64.Rela);
358+
try w.writeStruct(std.elf.elf64.Shdr{
359359
.sh_name = name_offset,
360-
.sh_type = std.elf.SHT_RELA,
360+
.sh_type = .RELA,
361361
.sh_flags = 0,
362362
.sh_addr = 0,
363363
.sh_offset = rela_sect_offset,
364-
.sh_size = rela_count * @sizeOf(std.elf.Elf64_Rela),
364+
.sh_size = size,
365365
.sh_link = symtab_index,
366-
.sh_info = sect.index,
366+
.sh_info = @intFromEnum(sect.index),
367367
.sh_addralign = 8,
368-
.sh_entsize = @sizeOf(std.elf.Elf64_Rela),
368+
.sh_entsize = @sizeOf(std.elf.elf64.Rela),
369369
});
370370
rela_sect_offset += size;
371371
}

0 commit comments

Comments
 (0)