@@ -26,6 +26,36 @@ pub type loff_t = ::c_longlong;
26
26
pub type __kernel_loff_t = :: c_longlong ;
27
27
pub type __kernel_pid_t = :: c_int ;
28
28
29
+ // elf.h
30
+
31
+ pub type Elf32_Addr = u32 ;
32
+ pub type Elf32_Half = u16 ;
33
+ pub type Elf32_Lword = u64 ;
34
+ pub type Elf32_Off = u32 ;
35
+ pub type Elf32_Sword = i32 ;
36
+ pub type Elf32_Word = u32 ;
37
+
38
+ pub type Elf64_Addr = u64 ;
39
+ pub type Elf64_Half = u16 ;
40
+ pub type Elf64_Lword = u64 ;
41
+ pub type Elf64_Off = u64 ;
42
+ pub type Elf64_Sword = i32 ;
43
+ pub type Elf64_Sxword = i64 ;
44
+ pub type Elf64_Word = u32 ;
45
+ pub type Elf64_Xword = u64 ;
46
+
47
+ cfg_if ! {
48
+ if #[ cfg( target_pointer_width = "64" ) ] {
49
+ type Elf_Addr = Elf64_Addr ;
50
+ type Elf_Half = Elf64_Half ;
51
+ type Elf_Phdr = Elf64_Phdr ;
52
+ } else if #[ cfg( target_pointer_width = "32" ) ] {
53
+ type Elf_Addr = Elf32_Addr ;
54
+ type Elf_Half = Elf32_Half ;
55
+ type Elf_Phdr = Elf32_Phdr ;
56
+ }
57
+ }
58
+
29
59
s ! {
30
60
pub struct stack_t {
31
61
pub ss_sp: * mut :: c_void,
@@ -244,6 +274,43 @@ s! {
244
274
pub svm_cid: :: c_uint,
245
275
pub svm_zero: [ u8 ; 4 ]
246
276
}
277
+
278
+ // elf.h
279
+
280
+ pub struct Elf32_Phdr {
281
+ pub p_type: Elf32_Word ,
282
+ pub p_offset: Elf32_Off ,
283
+ pub p_vaddr: Elf32_Addr ,
284
+ pub p_paddr: Elf32_Addr ,
285
+ pub p_filesz: Elf32_Word ,
286
+ pub p_memsz: Elf32_Word ,
287
+ pub p_flags: Elf32_Word ,
288
+ pub p_align: Elf32_Word ,
289
+ }
290
+
291
+ pub struct Elf64_Phdr {
292
+ pub p_type: Elf64_Word ,
293
+ pub p_flags: Elf64_Word ,
294
+ pub p_offset: Elf64_Off ,
295
+ pub p_vaddr: Elf64_Addr ,
296
+ pub p_paddr: Elf64_Addr ,
297
+ pub p_filesz: Elf64_Xword ,
298
+ pub p_memsz: Elf64_Xword ,
299
+ pub p_align: Elf64_Xword ,
300
+ }
301
+
302
+ // link.h
303
+
304
+ pub struct dl_phdr_info {
305
+ pub dlpi_addr: Elf_Addr ,
306
+ pub dlpi_name: * const :: c_char,
307
+ pub dlpi_phdr: * const Elf_Phdr ,
308
+ pub dlpi_phnum: Elf_Half ,
309
+ pub dlpi_adds: :: c_ulonglong,
310
+ pub dlpi_subs: :: c_ulonglong,
311
+ pub dlpi_tls_modid: usize ,
312
+ pub dlpi_tls_data: * mut :: c_void,
313
+ }
247
314
}
248
315
249
316
s_no_extra_traits ! {
@@ -2715,6 +2782,19 @@ extern "C" {
2715
2782
2716
2783
pub fn __system_property_set ( __name : * const :: c_char , __value : * const :: c_char ) -> :: c_int ;
2717
2784
pub fn __system_property_get ( __name : * const :: c_char , __value : * mut :: c_char ) -> :: c_int ;
2785
+
2786
+ // #include <link.h>
2787
+ /// Only available in API Version 21+
2788
+ pub fn dl_iterate_phdr (
2789
+ callback : :: Option <
2790
+ unsafe extern "C" fn (
2791
+ info : * mut dl_phdr_info ,
2792
+ size : usize ,
2793
+ data : * mut :: c_void ,
2794
+ ) -> :: c_int ,
2795
+ > ,
2796
+ data : * mut :: c_void ,
2797
+ ) -> :: c_int ;
2718
2798
}
2719
2799
2720
2800
cfg_if ! {
0 commit comments