/branches/dynload/uspace/lib/rtld/include/rtld_arch.h |
---|
36,6 → 36,7 |
#define RTLD_ARCH_H_ |
#include <rtld.h> |
#include <loader/pcb.h> |
void module_process_pre_arch(module_t *m); |
42,6 → 43,8 |
void rel_table_process(module_t *m, elf_rel_t *rt, size_t rt_size); |
void rela_table_process(module_t *m, elf_rela_t *rt, size_t rt_size); |
void program_run(void *entry, pcb_t *pcb); |
#endif |
/** @} |
/branches/dynload/uspace/lib/rtld/rtld.c |
---|
108,7 → 108,7 |
{ |
return 0; |
} |
/* |
typedef void (*ep2)(void *); |
void program_run(void *entry, pcb_t *pcb) |
120,7 → 120,7 |
"jmp *%0\n" |
:: "m" (entry), "a" (pcb) |
); |
} |
}*/ |
/** @} |
*/ |
/branches/dynload/uspace/lib/rtld/arch/ppc32/Makefile.inc |
---|
32,5 → 32,6 |
ARCH_SOURCES := \ |
arch/$(ARCH)/src/bootstrap.c \ |
arch/$(ARCH)/src/runtime.c \ |
arch/$(ARCH)/src/reloc.c |
arch/$(ARCH)/src/reloc.c \ |
arch/$(ARCH)/src/start.c |
/branches/dynload/uspace/lib/rtld/arch/ppc32/src/bootstrap.c |
---|
36,13 → 36,13 |
#include <elf_dyn.h> |
#include <rtld.h> |
#include <pcb.h> |
#include <loader/pcb.h> |
// for testing printf |
#include <stdio.h> |
void __main(void); |
void __io_init(void); |
void __main(pcb_t *pcb); |
//void __io_init(void); |
void __exit(void); |
static void kputint(unsigned i) |
100,9 → 100,9 |
int test_var = 0x818283; |
void __bootstrap(void); |
void __bootstrap(pcb_t *pcb); |
void __bootstrap(void) |
void __bootstrap(pcb_t *pcb) |
{ |
unsigned bias; |
uint32_t *plt; |
122,13 → 122,11 |
elf_rela_t *rel_table; |
elf_rela_t *jmp_rel_table; |
size_t jmp_rel_entries; |
pcb_t *pcb; |
uint32_t a, res; |
uint32_t *r_ptr; |
uint32_t *_plt_ent; |
kputint(42); |
pcb = __pcb_get(); |
/* The program loader (iloader) kindly provided us with these */ |
dynamic = pcb->rtld_dynamic; |
312,10 → 310,10 |
// while(1); |
/* Init libc and run rtld main */ |
kputint(0x22); |
__main(); |
__main(pcb); |
kputint(33); |
__io_init(); |
// kputint(33); |
// __io_init(); |
kputint(-1); |
kputint(0x52); |
// printf("Hello, world! (from ppc rtld)\n"); |
/branches/dynload/uspace/lib/rtld/arch/ppc32/src/start.c |
---|
0,0 → 1,50 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup rtld rtld |
* @brief |
* @{ |
*/ |
/** |
* @file |
*/ |
#include <rtld_arch.h> |
void program_run(void *entry, pcb_t *pcb) |
{ |
/* asm ( |
"mov %%eax, %%ebx\n" |
"jmp *%0\n" |
:: "m" (entry), "a" (pcb) |
);*/ |
} |
/** @} |
*/ |
/branches/dynload/uspace/lib/rtld/arch/ia32/Makefile.inc |
---|
33,4 → 33,5 |
arch/$(ARCH)/src/entry.s \ |
arch/$(ARCH)/src/bootstrap.c \ |
arch/$(ARCH)/src/runtime.c \ |
arch/$(ARCH)/src/reloc.c |
arch/$(ARCH)/src/reloc.c \ |
arch/$(ARCH)/src/start.c \ |
/branches/dynload/uspace/lib/rtld/arch/ia32/src/start.c |
---|
0,0 → 1,49 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup rtld rtld |
* @brief |
* @{ |
*/ |
/** |
* @file |
*/ |
#include <rtld_arch.h> |
void program_run(void *entry, pcb_t *pcb) |
{ |
asm ( |
"mov %%eax, %%ebx\n" |
"jmp *%0\n" |
:: "m" (entry), "a" (pcb) |
); |
} |
/** @} |
*/ |
/branches/dynload/boot/arch/ppc32/loader/Makefile |
---|
89,9 → 89,14 |
$(USPACEDIR)/srv/fs/fat/fat \ |
$(USPACEDIR)/app/tetris/tetris \ |
$(USPACEDIR)/app/tester/tester \ |
$(USPACEDIR)/app/klog/klog \ |
$(USPACEDIR)/app/cli/cli |
$(USPACEDIR)/app/cli/cli \ |
$(USPACEDIR)/app/dltest/dltest \ |
$(USPACEDIR)/app/klog/klog |
RD_LIBS = \ |
$(USPACEDIR)/lib/rtld/rtld.so \ |
$(USPACEDIR)/lib/libc-shared/libc.so.0 |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS)))) |
111,12 → 116,18 |
-for task in $(RD_TASKS) ; do \ |
rm -f $(USPACEDIR)/dist/sbin/`basename $$task` ; \ |
done |
-for lib in $(RD_LIBS) ; do \ |
rm -f $(USPACEDIR)/dist/lib/`basename $$lib` ; \ |
done |
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) initrd.img image.boot Makefile.depend |
_components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_TASKS) _link.ld.in |
_components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_TASKS) $(RD_LIBS) _link.ld.in |
for task in $(RD_TASKS) ; do \ |
cp $$task $(USPACEDIR)/dist/sbin/ ; \ |
done |
for lib in $(RD_LIBS) ; do \ |
cp $$lib $(USPACEDIR)/dist/lib/ ; \ |
done |
../../../../tools/mktmpfs.py 4096 $(USPACEDIR)/dist/ initrd.img |
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 4096 "unsigned int" $(COMPONENTS) ./initrd.img |