Rev 2980 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2980 | Rev 2981 | ||
---|---|---|---|
Line 50... | Line 50... | ||
50 | { |
50 | { |
51 | pcb_t *pcb; |
51 | pcb_t *pcb; |
52 | elf_info_t lib_info; |
52 | elf_info_t lib_info; |
53 | static module_t prog; |
53 | static module_t prog; |
54 | static module_t lib; |
54 | static module_t lib; |
- | 55 | module_t *rtld; |
|
55 | int rc; |
56 | int rc; |
56 | 57 | ||
57 | printf("Hello, world! (from rtld)\n"); |
58 | printf("Hello, world! (from rtld)\n"); |
58 | getchar(); |
59 | getchar(); |
59 | 60 | ||
- | 61 | /* rtld_dynamic and rtld->bias were filled out by the bootstrap code */ |
|
- | 62 | rtld = &runtime_env.rtld; |
|
- | 63 | dynamic_parse(runtime_env.rtld_dynamic, rtld->bias, &rtld->dyn); |
|
- | 64 | ||
60 | printf("Parse .dynamic section\n"); |
65 | printf("Parse .dynamic section\n"); |
61 | pcb = (pcb_t *)PCB_ADDRESS; |
66 | pcb = (pcb_t *)PCB_ADDRESS; |
62 | dynamic_parse(pcb->dynamic, 0, &prog.dyn); |
67 | dynamic_parse(pcb->dynamic, 0, &prog.dyn); |
63 | prog.bias = 0; |
68 | prog.bias = 0; |
64 | prog.dyn.soname = "[program]"; |
69 | prog.dyn.soname = "[program]"; |
Line 75... | Line 80... | ||
75 | lib.bias = 0x20000; |
80 | lib.bias = 0x20000; |
76 | printf("lib.bias=0x%x\n", lib.bias); |
81 | printf("lib.bias=0x%x\n", lib.bias); |
77 | 82 | ||
78 | runtime_env.program = &prog; |
83 | runtime_env.program = &prog; |
79 | runtime_env.libc = &lib; |
84 | runtime_env.libc = &lib; |
80 | runtime_env.rtld = NULL; |
- | |
81 | 85 | ||
82 | /* Parse program's relocation tables */ |
86 | /* Parse program's relocation tables */ |
- | 87 | printf("Resolve references in program\n"); |
|
83 | rel_table_process(&prog, prog.dyn.rel, prog.dyn.rel_sz); |
88 | rel_table_process(&prog, prog.dyn.rel, prog.dyn.rel_sz); |
84 | rel_table_process(&prog, prog.dyn.jmp_rel, prog.dyn.plt_rel_sz); |
89 | rel_table_process(&prog, prog.dyn.jmp_rel, prog.dyn.plt_rel_sz); |
85 | 90 | ||
- | 91 | /* Parse lib's relocation tables */ |
|
- | 92 | printf("Resolve references in library\n"); |
|
- | 93 | rel_table_process(&lib, lib.dyn.rel, lib.dyn.rel_sz); |
|
- | 94 | rel_table_process(&lib, lib.dyn.jmp_rel, lib.dyn.plt_rel_sz); |
|
- | 95 | ||
86 | printf("lib.bias=0x%x\n", lib.bias); |
96 | printf("lib.bias=0x%x\n", lib.bias); |
87 | 97 | ||
88 | printf("Run program..\n"); |
98 | printf("Run program..\n"); |
89 | pcb->entry(); |
99 | pcb->entry(); |
90 | } |
100 | } |