]> git.proxmox.com Git - rustc.git/blob - src/libstd/sys/sgx/abi/reloc.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / src / libstd / sys / sgx / abi / reloc.rs
1 use super::mem;
2 use crate::slice::from_raw_parts;
3
4 const R_X86_64_RELATIVE: u32 = 8;
5
6 #[repr(packed)]
7 struct Rela<T> {
8 offset: T,
9 info: T,
10 addend: T,
11 }
12
13 pub fn relocate_elf_rela() {
14 extern "C" {
15 static RELA: u64;
16 static RELACOUNT: usize;
17 }
18
19 if unsafe { RELACOUNT } == 0 {
20 return;
21 } // unsafe ok: link-time constant
22
23 let relas = unsafe {
24 from_raw_parts::<Rela<u64>>(mem::rel_ptr(RELA), RELACOUNT) // unsafe ok: link-time constant
25 };
26 for rela in relas {
27 if rela.info != (/*0 << 32 |*/R_X86_64_RELATIVE as u64) {
28 rtabort!("Invalid relocation");
29 }
30 unsafe { *mem::rel_ptr_mut::<*const ()>(rela.offset) = mem::rel_ptr(rela.addend) };
31 }
32 }