blob: dae455e0237550de4ce088436780a17d95900aa4 (
plain)
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
31
32
33
34
35
36
37
38
39
|
/*
* rtld entry pseudo code - turn into assembler and tweak it
*/
#include <sys/types.h>
#include <sys/types.h>
#include <a.out.h>
#include "link.h"
#include "md.h"
extern long _GOT_[];
extern void (*rtld)();
extern void (*binder())();
void
rtld_entry(version, crtp)
int version;
struct crt *crtp;
{
register struct link_dynamic *dp;
register void (*f)();
/* __DYNAMIC is first entry in GOT */
dp = (struct link_dynamic *) (_GOT_[0]+crtp->crt_ba);
f = (void (*)())((long)rtld + crtp->crt_ba);
(*f)(version, crtp, dp);
}
void
binder_entry()
{
extern int PC;
struct jmpslot *sp;
void (*func)();
func = binder(PC, sp->reloc_index & 0x003fffff);
(*func)();
}
|