3
3
#include <string.h>
4
4
#include <dyld.h>
5
5
6
- static int fixup_rela (struct dyld_info * info , Elf32_Rela * rela ,
6
+ static int fixup_rela (struct dyld_info * info , const Elf32_Rela * rela ,
7
7
Elf32_Addr (* resolve_import )(const char * ),
8
8
const char * * error_out )
9
9
{
10
- Elf32_Sym * sym = NULL ;
10
+ const Elf32_Sym * sym = NULL ;
11
11
if (ELF32_R_SYM (rela -> r_info ) != 0 )
12
12
sym = & info -> symtab [ELF32_R_SYM (rela -> r_info )];
13
13
Elf32_Addr value ;
@@ -49,11 +49,11 @@ static int fixup_rela(struct dyld_info *info, Elf32_Rela *rela,
49
49
return 1 ;
50
50
}
51
51
52
- int dyld_load (void * shlib , Elf32_Addr base ,
52
+ int dyld_load (const void * shlib , Elf32_Addr base ,
53
53
Elf32_Addr (* resolve_import )(const char * ),
54
54
struct dyld_info * info , const char * * error_out )
55
55
{
56
- Elf32_Ehdr * ehdr = (Elf32_Ehdr * )shlib ;
56
+ const Elf32_Ehdr * ehdr = (const Elf32_Ehdr * )shlib ;
57
57
58
58
const unsigned char expected_ident [EI_NIDENT ] = {
59
59
ELFMAG0 , ELFMAG1 , ELFMAG2 , ELFMAG3 ,
@@ -75,14 +75,14 @@ int dyld_load(void *shlib, Elf32_Addr base,
75
75
#error Unsupported architecture
76
76
#endif
77
77
78
- Elf32_Phdr * phdr = (Elf32_Phdr * )((intptr_t )shlib + ehdr -> e_phoff );
79
- Elf32_Dyn * dyn = NULL ;
78
+ const Elf32_Phdr * phdr = (const Elf32_Phdr * )((intptr_t )shlib + ehdr -> e_phoff );
79
+ const Elf32_Dyn * dyn = NULL ;
80
80
for (int i = 0 ; i < ehdr -> e_phnum ; i ++ ) {
81
81
if (phdr [i ].p_type == PT_DYNAMIC )
82
- dyn = (Elf32_Dyn * )((intptr_t )shlib + phdr [i ].p_offset );
82
+ dyn = (const Elf32_Dyn * )((intptr_t )shlib + phdr [i ].p_offset );
83
83
84
84
memcpy ((void * )(base + phdr [i ].p_vaddr ),
85
- (void * )((intptr_t )shlib + phdr [i ].p_offset ),
85
+ (const void * )((intptr_t )shlib + phdr [i ].p_offset ),
86
86
phdr [i ].p_filesz );
87
87
}
88
88
@@ -91,23 +91,24 @@ int dyld_load(void *shlib, Elf32_Addr base,
91
91
return 0 ;
92
92
}
93
93
94
- char * strtab = NULL ;
95
- Elf32_Sym * symtab = NULL ;
96
- Elf32_Rela * rela = NULL , * pltrel = NULL ;
97
- Elf32_Word * hash = NULL , init = 0 ;
94
+ const char * strtab = NULL ;
95
+ const Elf32_Sym * symtab = NULL ;
96
+ const Elf32_Rela * rela = NULL , * pltrel = NULL ;
97
+ const Elf32_Word * hash = NULL ;
98
+ Elf32_Word init = 0 ;
98
99
size_t syment = sizeof (Elf32_Sym ), relaent = sizeof (Elf32_Rela ),
99
100
relanum = 0 , pltrelnum = 0 ;
100
101
while (dyn -> d_tag != DT_NULL ) {
101
102
switch (dyn -> d_tag ) {
102
- case DT_STRTAB : strtab = (char * )(base + dyn -> d_un .d_ptr ); break ;
103
- case DT_SYMTAB : symtab = (Elf32_Sym * )(base + dyn -> d_un .d_ptr ); break ;
103
+ case DT_STRTAB : strtab = (const char * )(base + dyn -> d_un .d_ptr ); break ;
104
+ case DT_SYMTAB : symtab = (const Elf32_Sym * )(base + dyn -> d_un .d_ptr ); break ;
104
105
case DT_SYMENT : syment = dyn -> d_un .d_val ; break ;
105
- case DT_RELA : rela = (Elf32_Rela * )(base + dyn -> d_un .d_ptr ); break ;
106
+ case DT_RELA : rela = (const Elf32_Rela * )(base + dyn -> d_un .d_ptr ); break ;
106
107
case DT_RELAENT : relaent = dyn -> d_un .d_val ; break ;
107
108
case DT_RELASZ : relanum = dyn -> d_un .d_val / sizeof (Elf32_Rela ); break ;
108
- case DT_JMPREL : pltrel = (Elf32_Rela * )(base + dyn -> d_un .d_ptr ); break ;
109
+ case DT_JMPREL : pltrel = (const Elf32_Rela * )(base + dyn -> d_un .d_ptr ); break ;
109
110
case DT_PLTRELSZ : pltrelnum = dyn -> d_un .d_val / sizeof (Elf32_Rela ); break ;
110
- case DT_HASH : hash = (Elf32_Word * )(base + dyn -> d_un .d_ptr ); break ;
111
+ case DT_HASH : hash = (const Elf32_Word * )(base + dyn -> d_un .d_ptr ); break ;
111
112
case DT_INIT : init = dyn -> d_un .d_val ; break ;
112
113
113
114
case DT_REL :
0 commit comments