Rev 2973 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2973 | Rev 2978 | ||
---|---|---|---|
Line 47... | Line 47... | ||
47 | void _rtld_main(void) |
47 | void _rtld_main(void) |
48 | { |
48 | { |
49 | pcb_t *pcb; |
49 | pcb_t *pcb; |
50 | elf_info_t lib_info; |
50 | elf_info_t lib_info; |
51 | static module_t prog; |
51 | static module_t prog; |
- | 52 | static module_t lib; |
|
52 | int rc; |
53 | int rc; |
53 | 54 | ||
54 | printf("Hello, world! (from rtld)\n"); |
55 | printf("Hello, world! (from rtld)\n"); |
55 | getchar(); |
56 | getchar(); |
56 | 57 | ||
57 | printf("Parse .dynamic section\n"); |
58 | printf("Parse .dynamic section\n"); |
58 | pcb = (pcb_t *)PCB_ADDRESS; |
59 | pcb = (pcb_t *)PCB_ADDRESS; |
59 | dynamic_parse(pcb->dynamic, 0, &prog.dyn); |
60 | dynamic_parse(pcb->dynamic, 0, &prog.dyn); |
- | 61 | prog.bias = 0; |
|
60 | 62 | ||
61 | printf("Program requested library '%s'\n", prog.dyn.needed); |
63 | printf("Program requested library '%s'\n", prog.dyn.needed); |
62 | 64 | ||
63 | rc = elf_load_file("/libtest.so.0", 0x20000, &lib_info); |
65 | rc = elf_load_file("/libtest.so.0", 0x20000, &lib_info); |
64 | if (rc < 0) { |
66 | if (rc < 0) { |
65 | printf("failed to load library\n"); |
67 | printf("failed to load library\n"); |
66 | return; |
68 | return; |
67 | } |
69 | } |
68 | 70 | ||
- | 71 | dynamic_parse(lib_info.dynamic, 0x20000, &lib.dyn); |
|
- | 72 | lib.bias = 0x20000; |
|
- | 73 | ||
69 | /* Parse program's relocation tables */ |
74 | /* Parse program's relocation tables */ |
70 | rel_table_process(&prog, prog.dyn.rel, prog.dyn.rel_sz); |
75 | rel_table_process(&prog, prog.dyn.rel, prog.dyn.rel_sz, &lib); |
71 | rel_table_process(&prog, prog.dyn.jmp_rel, prog.dyn.plt_rel_sz); |
76 | rel_table_process(&prog, prog.dyn.jmp_rel, prog.dyn.plt_rel_sz, &lib); |
72 | 77 | ||
73 | printf("Run program..\n"); |
78 | printf("Run program..\n"); |
74 | pcb->entry(); |
79 | pcb->entry(); |
75 | } |
80 | } |
76 | 81 |