@@ -27,17 +27,32 @@ pub type Elf32_Half = u16;
27
27
pub type Elf32_Word = u32 ;
28
28
pub type Elf32_Off = u32 ;
29
29
pub type Elf32_Addr = u32 ;
30
+ pub type Elf32_Xword = u64 ;
31
+ pub type Elf32_Sword = i32 ;
30
32
31
33
pub type Elf64_Half = u16 ;
32
34
pub type Elf64_Word = u32 ;
33
35
pub type Elf64_Off = u64 ;
34
36
pub type Elf64_Addr = u64 ;
35
37
pub type Elf64_Xword = u64 ;
36
38
pub type Elf64_Sxword = i64 ;
39
+ pub type Elf64_Sword = i32 ;
37
40
38
41
pub type Elf32_Section = u16 ;
39
42
pub type Elf64_Section = u16 ;
40
43
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
+
41
56
// linux/can.h
42
57
pub type canid_t = u32 ;
43
58
@@ -564,6 +579,16 @@ s! {
564
579
pub sh_entsize: Elf64_Xword ,
565
580
}
566
581
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
+
567
592
pub struct ucred {
568
593
pub pid: :: pid_t,
569
594
pub uid: :: uid_t,
@@ -1014,6 +1039,17 @@ cfg_if! {
1014
1039
pub src_addr: :: sockaddr,
1015
1040
pub tsc: [ __u8; IW_ENCODE_SEQ_MAX_SIZE ] ,
1016
1041
}
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
+ }
1017
1053
}
1018
1054
}
1019
1055
}
@@ -5214,6 +5250,30 @@ f! {
5214
5250
pub fn BPF_JUMP ( code: :: __u16, k: :: __u32, jt: :: __u8, jf: :: __u8) -> sock_filter {
5215
5251
sock_filter{ code: code, jt: jt, jf: jf, k: k}
5216
5252
}
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
+ }
5217
5277
}
5218
5278
5219
5279
safe_f ! {
0 commit comments