authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-22 16:41:25+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-23 13:50:24+02:00
logb95cdf0aeb4d4d31c0b6a54302ef61baec8f6773
tree9899799a79075c59eb753b0b772c7718be7a09fa
parentc3ce04b9e548b0dbf2c286e7c764320620f06bf9

elf: add helpers for extracting type and bind from symbol def


1 files changed, 18 insertions(+), 4 deletions(-)

lib/std/elf.zig+18-4
...@@ -719,6 +719,13 @@ pub const Elf32_Sym = extern struct {...@@ -719,6 +719,13 @@ pub const Elf32_Sym = extern struct {
719 st_info: u8,719 st_info: u8,
720 st_other: u8,720 st_other: u8,
721 st_shndx: Elf32_Section,721 st_shndx: Elf32_Section,
722
723 pub inline fn st_type(self: @This()) u4 {
724 return @truncate(u4, self.st_info);
725 }
726 pub inline fn st_bind(self: @This()) u4 {
727 return @truncate(u4, self.st_info >> 4);
728 }
722};729};
723pub const Elf64_Sym = extern struct {730pub const Elf64_Sym = extern struct {
724 st_name: Elf64_Word,731 st_name: Elf64_Word,
...@@ -727,6 +734,13 @@ pub const Elf64_Sym = extern struct {...@@ -727,6 +734,13 @@ pub const Elf64_Sym = extern struct {
727 st_shndx: Elf64_Section,734 st_shndx: Elf64_Section,
728 st_value: Elf64_Addr,735 st_value: Elf64_Addr,
729 st_size: Elf64_Xword,736 st_size: Elf64_Xword,
737
738 pub inline fn st_type(self: @This()) u4 {
739 return @truncate(u4, self.st_info);
740 }
741 pub inline fn st_bind(self: @This()) u4 {
742 return @truncate(u4, self.st_info >> 4);
743 }
730};744};
731pub const Elf32_Syminfo = extern struct {745pub const Elf32_Syminfo = extern struct {
732 si_boundto: Elf32_Half,746 si_boundto: Elf32_Half,
...@@ -744,7 +758,7 @@ pub const Elf32_Rel = extern struct {...@@ -744,7 +758,7 @@ pub const Elf32_Rel = extern struct {
744 return @truncate(u24, self.r_info >> 8);758 return @truncate(u24, self.r_info >> 8);
745 }759 }
746 pub inline fn r_type(self: @This()) u8 {760 pub inline fn r_type(self: @This()) u8 {
747 return @truncate(u8, self.r_info & 0xff);761 return @truncate(u8, self.r_info);
748 }762 }
749};763};
750pub const Elf64_Rel = extern struct {764pub const Elf64_Rel = extern struct {
...@@ -755,7 +769,7 @@ pub const Elf64_Rel = extern struct {...@@ -755,7 +769,7 @@ pub const Elf64_Rel = extern struct {
755 return @truncate(u32, self.r_info >> 32);769 return @truncate(u32, self.r_info >> 32);
756 }770 }
757 pub inline fn r_type(self: @This()) u32 {771 pub inline fn r_type(self: @This()) u32 {
758 return @truncate(u32, self.r_info & 0xffffffff);772 return @truncate(u32, self.r_info);
759 }773 }
760};774};
761pub const Elf32_Rela = extern struct {775pub const Elf32_Rela = extern struct {
...@@ -767,7 +781,7 @@ pub const Elf32_Rela = extern struct {...@@ -767,7 +781,7 @@ pub const Elf32_Rela = extern struct {
767 return @truncate(u24, self.r_info >> 8);781 return @truncate(u24, self.r_info >> 8);
768 }782 }
769 pub inline fn r_type(self: @This()) u8 {783 pub inline fn r_type(self: @This()) u8 {
770 return @truncate(u8, self.r_info & 0xff);784 return @truncate(u8, self.r_info);
771 }785 }
772};786};
773pub const Elf64_Rela = extern struct {787pub const Elf64_Rela = extern struct {
...@@ -779,7 +793,7 @@ pub const Elf64_Rela = extern struct {...@@ -779,7 +793,7 @@ pub const Elf64_Rela = extern struct {
779 return @truncate(u32, self.r_info >> 32);793 return @truncate(u32, self.r_info >> 32);
780 }794 }
781 pub inline fn r_type(self: @This()) u32 {795 pub inline fn r_type(self: @This()) u32 {
782 return @truncate(u32, self.r_info & 0xffffffff);796 return @truncate(u32, self.r_info);
783 }797 }
784};798};
785pub const Elf32_Dyn = extern struct {799pub const Elf32_Dyn = extern struct {