From b95cdf0aeb4d4d31c0b6a54302ef61baec8f6773 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 22 Apr 2023 16:41:25 +0200 Subject: elf: add helpers for extracting type and bind from symbol def --- lib/std/elf.zig | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/std/elf.zig b/lib/std/elf.zig index 6807e153fd..e2cad5640e 100644 --- a/lib/std/elf.zig +++ b/lib/std/elf.zig @@ -719,6 +719,13 @@ pub const Elf32_Sym = extern struct { st_info: u8, st_other: u8, st_shndx: Elf32_Section, + + pub inline fn st_type(self: @This()) u4 { + return @truncate(u4, self.st_info); + } + pub inline fn st_bind(self: @This()) u4 { + return @truncate(u4, self.st_info >> 4); + } }; pub const Elf64_Sym = extern struct { st_name: Elf64_Word, @@ -727,6 +734,13 @@ pub const Elf64_Sym = extern struct { st_shndx: Elf64_Section, st_value: Elf64_Addr, st_size: Elf64_Xword, + + pub inline fn st_type(self: @This()) u4 { + return @truncate(u4, self.st_info); + } + pub inline fn st_bind(self: @This()) u4 { + return @truncate(u4, self.st_info >> 4); + } }; pub const Elf32_Syminfo = extern struct { si_boundto: Elf32_Half, @@ -744,7 +758,7 @@ pub const Elf32_Rel = extern struct { return @truncate(u24, self.r_info >> 8); } pub inline fn r_type(self: @This()) u8 { - return @truncate(u8, self.r_info & 0xff); + return @truncate(u8, self.r_info); } }; pub const Elf64_Rel = extern struct { @@ -755,7 +769,7 @@ pub const Elf64_Rel = extern struct { return @truncate(u32, self.r_info >> 32); } pub inline fn r_type(self: @This()) u32 { - return @truncate(u32, self.r_info & 0xffffffff); + return @truncate(u32, self.r_info); } }; pub const Elf32_Rela = extern struct { @@ -767,7 +781,7 @@ pub const Elf32_Rela = extern struct { return @truncate(u24, self.r_info >> 8); } pub inline fn r_type(self: @This()) u8 { - return @truncate(u8, self.r_info & 0xff); + return @truncate(u8, self.r_info); } }; pub const Elf64_Rela = extern struct { @@ -779,7 +793,7 @@ pub const Elf64_Rela = extern struct { return @truncate(u32, self.r_info >> 32); } pub inline fn r_type(self: @This()) u32 { - return @truncate(u32, self.r_info & 0xffffffff); + return @truncate(u32, self.r_info); } }; pub const Elf32_Dyn = extern struct { -- cgit v1.2.3