@@ -27,17 +27,32 @@ pub type Elf32_Half = u16;
2727pub type Elf32_Word = u32 ;
2828pub type Elf32_Off = u32 ;
2929pub type Elf32_Addr = u32 ;
30+ pub type Elf32_Xword = u64 ;
31+ pub type Elf32_Sword = i32 ;
3032
3133pub type Elf64_Half = u16 ;
3234pub type Elf64_Word = u32 ;
3335pub type Elf64_Off = u64 ;
3436pub type Elf64_Addr = u64 ;
3537pub type Elf64_Xword = u64 ;
3638pub type Elf64_Sxword = i64 ;
39+ pub type Elf64_Sword = i32 ;
3740
3841pub type Elf32_Section = u16 ;
3942pub type Elf64_Section = u16 ;
4043
44+ pub type Elf32_Relr = Elf32_Word ;
45+ pub type Elf64_Relr = Elf32_Xword ;
46+ pub type Elf32_Rel = __c_anonymous_elf32_rel ;
47+ pub type Elf64_Rel = __c_anonymous_elf64_rel ;
48+
49+ cfg_if ! {
50+ if #[ cfg( not( target_arch = "sparc64" ) ) ] {
51+ pub type Elf32_Rela = __c_anonymous_elf32_rela;
52+ pub type Elf64_Rela = __c_anonymous_elf64_rela;
53+ }
54+ }
55+
4156// linux/can.h
4257pub type canid_t = u32 ;
4358
@@ -564,6 +579,16 @@ s! {
564579 pub sh_entsize: Elf64_Xword ,
565580 }
566581
582+ pub struct __c_anonymous_elf32_rel {
583+ pub r_offset: Elf32_Addr ,
584+ pub r_info: Elf32_Word ,
585+ }
586+
587+ pub struct __c_anonymous_elf64_rel {
588+ pub r_offset: Elf64_Addr ,
589+ pub r_info: Elf64_Xword ,
590+ }
591+
567592 pub struct ucred {
568593 pub pid: :: pid_t,
569594 pub uid: :: uid_t,
@@ -1014,6 +1039,17 @@ cfg_if! {
10141039 pub src_addr: :: sockaddr,
10151040 pub tsc: [ __u8; IW_ENCODE_SEQ_MAX_SIZE ] ,
10161041 }
1042+ pub struct __c_anonymous_elf32_rela {
1043+ pub r_offset: Elf32_Addr ,
1044+ pub r_info: Elf32_Word ,
1045+ pub r_addend: Elf32_Sword ,
1046+ }
1047+
1048+ pub struct __c_anonymous_elf64_rela {
1049+ pub r_offset: Elf64_Addr ,
1050+ pub r_info: Elf64_Xword ,
1051+ pub r_addend: Elf64_Sxword ,
1052+ }
10171053 }
10181054 }
10191055}
@@ -5214,6 +5250,30 @@ f! {
52145250 pub fn BPF_JUMP ( code: :: __u16, k: :: __u32, jt: :: __u8, jf: :: __u8) -> sock_filter {
52155251 sock_filter{ code: code, jt: jt, jf: jf, k: k}
52165252 }
5253+
5254+ pub fn ELF32_R_SYM ( val: Elf32_Word ) -> Elf32_Word {
5255+ val >> 8
5256+ }
5257+
5258+ pub fn ELF32_R_TYPE ( val: Elf32_Word ) -> Elf32_Word {
5259+ val & 0xff
5260+ }
5261+
5262+ pub fn ELF32_R_INFO ( sym: Elf32_Word , t: Elf32_Word ) -> Elf32_Word {
5263+ sym << 8 + t & 0xff
5264+ }
5265+
5266+ pub fn ELF64_R_SYM ( val: Elf64_Xword ) -> Elf64_Xword {
5267+ val >> 32
5268+ }
5269+
5270+ pub fn ELF64_R_TYPE ( val: Elf64_Xword ) -> Elf64_Xword {
5271+ val & 0xffffffff
5272+ }
5273+
5274+ pub fn ELF64_R_INFO ( sym: Elf64_Xword , t: Elf64_Xword ) -> Elf64_Xword {
5275+ sym << 32 + t
5276+ }
52175277}
52185278
52195279safe_f ! {
0 commit comments