aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorjacob gw <jacoblevgw@gmail.com>2021-03-04 16:13:49 -0500
committerVeikka Tuominen <git@vexu.eu>2021-03-07 23:18:26 +0200
commit5d215cc76bcac12afbda7b10ec04bbf6c5b47910 (patch)
tree90e0accadd021cc11bea3e92ba96a373904843b6 /src/link/Elf.zig
parent0447a2c041a4be843251396e668e074186aa49a2 (diff)
downloadzig-5d215cc76bcac12afbda7b10ec04bbf6c5b47910.tar.gz
zig-5d215cc76bcac12afbda7b10ec04bbf6c5b47910.zip
stage2 Elf linker: fill in bswapAllFields
I moved it to std.elf since it could be used there and added test
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index bfef2cd12c..bbbc9e25ed 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -1107,7 +1107,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation) !void {
for (buf) |*phdr, i| {
phdr.* = progHeaderTo32(self.program_headers.items[i]);
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Phdr, phdr);
+ std.elf.bswapAllFields(elf.Elf32_Phdr, phdr);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), self.phdr_table_offset.?);
@@ -1119,7 +1119,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation) !void {
for (buf) |*phdr, i| {
phdr.* = self.program_headers.items[i];
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Phdr, phdr);
+ std.elf.bswapAllFields(elf.Elf64_Phdr, phdr);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), self.phdr_table_offset.?);
@@ -1196,7 +1196,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation) !void {
shdr.* = sectHeaderTo32(self.sections.items[i]);
log.debug("writing section {}\n", .{shdr.*});
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Shdr, shdr);
+ std.elf.bswapAllFields(elf.Elf32_Shdr, shdr);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), self.shdr_table_offset.?);
@@ -1209,7 +1209,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation) !void {
shdr.* = self.sections.items[i];
log.debug("writing section {}\n", .{shdr.*});
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Shdr, shdr);
+ std.elf.bswapAllFields(elf.Elf64_Shdr, shdr);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), self.shdr_table_offset.?);
@@ -2787,14 +2787,14 @@ fn writeProgHeader(self: *Elf, index: usize) !void {
.p32 => {
var phdr = [1]elf.Elf32_Phdr{progHeaderTo32(self.program_headers.items[index])};
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Phdr, &phdr[0]);
+ std.elf.bswapAllFields(elf.Elf32_Phdr, &phdr[0]);
}
return self.base.file.?.pwriteAll(mem.sliceAsBytes(&phdr), offset);
},
.p64 => {
var phdr = [1]elf.Elf64_Phdr{self.program_headers.items[index]};
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Phdr, &phdr[0]);
+ std.elf.bswapAllFields(elf.Elf64_Phdr, &phdr[0]);
}
return self.base.file.?.pwriteAll(mem.sliceAsBytes(&phdr), offset);
},
@@ -2808,7 +2808,7 @@ fn writeSectHeader(self: *Elf, index: usize) !void {
var shdr: [1]elf.Elf32_Shdr = undefined;
shdr[0] = sectHeaderTo32(self.sections.items[index]);
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Shdr, &shdr[0]);
+ std.elf.bswapAllFields(elf.Elf32_Shdr, &shdr[0]);
}
const offset = self.shdr_table_offset.? + index * @sizeOf(elf.Elf32_Shdr);
return self.base.file.?.pwriteAll(mem.sliceAsBytes(&shdr), offset);
@@ -2816,7 +2816,7 @@ fn writeSectHeader(self: *Elf, index: usize) !void {
.p64 => {
var shdr = [1]elf.Elf64_Shdr{self.sections.items[index]};
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Shdr, &shdr[0]);
+ std.elf.bswapAllFields(elf.Elf64_Shdr, &shdr[0]);
}
const offset = self.shdr_table_offset.? + index * @sizeOf(elf.Elf64_Shdr);
return self.base.file.?.pwriteAll(mem.sliceAsBytes(&shdr), offset);
@@ -2914,7 +2914,7 @@ fn writeSymbol(self: *Elf, index: usize) !void {
},
};
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Sym, &sym[0]);
+ std.elf.bswapAllFields(elf.Elf32_Sym, &sym[0]);
}
const off = syms_sect.sh_offset + @sizeOf(elf.Elf32_Sym) * index;
try self.base.file.?.pwriteAll(mem.sliceAsBytes(sym[0..1]), off);
@@ -2922,7 +2922,7 @@ fn writeSymbol(self: *Elf, index: usize) !void {
.p64 => {
var sym = [1]elf.Elf64_Sym{self.local_symbols.items[index]};
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Sym, &sym[0]);
+ std.elf.bswapAllFields(elf.Elf64_Sym, &sym[0]);
}
const off = syms_sect.sh_offset + @sizeOf(elf.Elf64_Sym) * index;
try self.base.file.?.pwriteAll(mem.sliceAsBytes(sym[0..1]), off);
@@ -2953,7 +2953,7 @@ fn writeAllGlobalSymbols(self: *Elf) !void {
.st_shndx = self.global_symbols.items[i].st_shndx,
};
if (foreign_endian) {
- bswapAllFields(elf.Elf32_Sym, sym);
+ std.elf.bswapAllFields(elf.Elf32_Sym, sym);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), global_syms_off);
@@ -2972,7 +2972,7 @@ fn writeAllGlobalSymbols(self: *Elf) !void {
.st_shndx = self.global_symbols.items[i].st_shndx,
};
if (foreign_endian) {
- bswapAllFields(elf.Elf64_Sym, sym);
+ std.elf.bswapAllFields(elf.Elf64_Sym, sym);
}
}
try self.base.file.?.pwriteAll(mem.sliceAsBytes(buf), global_syms_off);
@@ -3188,10 +3188,6 @@ fn pwriteDbgInfoNops(
try self.base.file.?.pwritevAll(vecs[0..vec_index], offset - prev_padding_size);
}
-fn bswapAllFields(comptime S: type, ptr: *S) void {
- @panic("TODO implement bswapAllFields");
-}
-
fn progHeaderTo32(phdr: elf.Elf64_Phdr) elf.Elf32_Phdr {
return .{
.p_type = phdr.p_type,