This source file includes following definitions.
- relocate_rel
- relocate_rela
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <sys/param.h>
31 #include <sys/elf.h>
32 #include <boot.h>
33
34 int
35 relocate_rel(Elf32_Rel *rel, Elf32_Addr sym_val, char *target_sect)
36 {
37 Elf32_Addr *where;
38
39 where = (Elf32_Addr *)(target_sect + rel->r_offset);
40
41 switch (ELF32_R_TYPE(rel->r_info)) {
42 case R_386_NONE:
43 break;
44 case R_386_32:
45 *where += (vaddr_t)ptokv(sym_val);
46 ELFDBG(("R_386_32: %lx -> %lx\n",
47 (long)where, (long)*where));
48 break;
49 case R_386_PC32:
50 *where += sym_val - (Elf32_Addr)where;
51 ELFDBG(("R_386_PC32: %lx -> %lx\n",
52 (long)where, (long)*where));
53 break;
54 default:
55 ELFDBG(("Unkown relocation type=%d\n",
56 ELF32_R_TYPE(rel->r_info)));
57 panic("relocation fail");
58 return -1;
59 }
60 return 0;
61 }
62
63 int
64 relocate_rela(Elf32_Rela *rela, Elf32_Addr sym_val, char *target_sec)
65 {
66
67 panic("invalid relocation type");
68 return -1;
69 }
|