Changes in / [7308e84:04803bf] in mainline
- Files:
-
- 74 added
- 12 deleted
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
r7308e84 r04803bf 525 525 ! [PLATFORM=sparc64&MACHINE=generic] CONFIG_AOUT_ISOFS_B (y) 526 526 527 % Build shared C library 528 ! CONFIG_BUILD_SHARED_LIBC (y/n) 529 530 % Link against shared C library 531 ! [CONFIG_BUILD_SHARED_LIBC=y] CONFIG_USE_SHARED_LIBC (n/y) 532 ! [CONFIG_BUILD_SHARED_LIBC=n] CONFIG_USE_SHARED_LIBC (n) 533 527 534 % Load disk drivers on startup 528 535 ! CONFIG_START_BD (n/y) -
boot/Makefile
r7308e84 r04803bf 55 55 cp "$$file" "$(DIST_PATH)/srv/" ; \ 56 56 done 57 for file in $(RD_LIBS) ; do \ 58 cp "$$file" "$(DIST_PATH)/lib/" ; \ 59 done 57 60 for file in $(RD_APPS) ; do \ 58 61 cp "$$file" "$(DIST_PATH)/app/" ; \ … … 83 86 rm -f $(USPACE_PATH)/dist/srv/* 84 87 rm -rf $(USPACE_PATH)/dist/drv/* 88 rm -f $(USPACE_PATH)/dist/lib/* 85 89 rm -f $(USPACE_PATH)/dist/app/* 86 90 rm -f $(USPACE_PATH)/dist/cfg/net/* -
boot/Makefile.common
r7308e84 r04803bf 118 118 RD_DRV_CFG = 119 119 120 RD_LIBS = \ 121 $(USPACE_PATH)/lib/libtest/libtest.so.0 122 123 ifeq ($(CONFIG_BUILD_SHARED_LIBC), y) 124 RD_LIBS += $(USPACE_PATH)/lib/c/shared/libc.so.0 125 RD_APPS += $(USPACE_PATH)/app/dltest/dltest 126 endif 127 120 128 RD_APPS_ESSENTIAL = \ 121 129 $(USPACE_PATH)/app/bdsh/bdsh \ … … 124 132 125 133 RD_APPS_NON_ESSENTIAL = \ 134 $(USPACE_PATH)/app/dltest2/dltest2 \ 135 $(USPACE_PATH)/app/dload/dload \ 126 136 $(USPACE_PATH)/app/edit/edit \ 127 137 $(USPACE_PATH)/app/kill/kill \ -
boot/arch/mips32/src/Makefile
r7308e84 r04803bf 1 1 # 2 # Copyright (c) 2005 Martin Decky 3 # Copyright (c) 2007 Jakub Jermar 2 # Copyright (c) 2006 Martin Decky 4 3 # All rights reserved. 5 4 # … … 28 27 # 29 28 30 include Makefile.common 29 include ../../../../version 30 -include ../../../../Makefile.config 31 31 32 .PHONY: all clean 32 ## Toolchain configuration 33 # 33 34 34 all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h 35 -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV) 36 $(MAKE) -f Makefile.build PRECHECK=$(PRECHECK) 35 ifndef CROSS_PREFIX 36 CROSS_PREFIX = /usr/local 37 endif 38 39 BFD_ARCH = mips 40 TARGET = mipsel-linux-gnu 41 TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel/bin 42 43 ifeq ($(MACHINE),lgxemul) 44 BFD_NAME = elf32-tradlittlemips 45 BFD = ecoff-littlemips 46 endif 47 ifeq ($(MACHINE),bgxemul) 48 BFD_NAME = elf32-tradbigmips 49 BFD = ecoff-bigmips 50 TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips/bin 51 TARGET = mips-linux-gnu 52 endif 53 ifeq ($(MACHINE),msim) 54 BFD_NAME = elf32-tradlittlemips 55 BFD = binary 56 endif 57 58 ifeq ($(COMPILER),gcc_native) 59 CC = gcc 60 AS = as 61 LD = ld 62 OBJCOPY = objcopy 63 OBJDUMP = objdump 64 endif 65 66 ifeq ($(COMPILER),gcc_cross) 67 CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc 68 AS = $(TOOLCHAIN_DIR)/$(TARGET)-as 69 LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld 70 OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy 71 OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump 72 endif 73 74 CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mhard-float -mips3 -pipe 75 76 SOURCES = \ 77 main.c \ 78 msim.c \ 79 _components.c \ 80 ../../../generic/printf.c \ 81 ../../../generic/string.c \ 82 asm.S \ 83 boot.S 84 85 COMPONENTS = \ 86 $(KERNELDIR)/kernel.bin \ 87 $(USPACEDIR)/srv/ns/ns \ 88 $(USPACEDIR)/srv/loader/loader \ 89 $(USPACEDIR)/app/init/init \ 90 $(USPACEDIR)/srv/devmap/devmap \ 91 $(USPACEDIR)/srv/bd/rd/rd \ 92 $(USPACEDIR)/srv/vfs/vfs 93 ifeq ($(RDFMT),tmpfs) 94 COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs 95 endif 96 ifeq ($(RDFMT),fat) 97 COMPONENTS += $(USPACEDIR)/srv/fs/fat/fat 98 endif 99 100 RD_SRVS = \ 101 $(USPACEDIR)/srv/fb/fb \ 102 $(USPACEDIR)/srv/kbd/kbd \ 103 $(USPACEDIR)/srv/console/console \ 104 $(USPACEDIR)/srv/fs/devfs/devfs \ 105 $(USPACEDIR)/srv/fs/tmpfs/tmpfs \ 106 $(USPACEDIR)/srv/fs/fat/fat \ 107 $(USPACEDIR)/srv/bd/file_bd/file_bd \ 108 $(USPACEDIR)/srv/bd/gxe_bd/gxe_bd 109 110 RD_APPS = \ 111 $(USPACEDIR)/app/getvc/getvc \ 112 $(USPACEDIR)/app/tetris/tetris \ 113 $(USPACEDIR)/app/tester/tester \ 114 $(USPACEDIR)/app/dload/dload \ 115 $(USPACEDIR)/app/dltest/dltest \ 116 $(USPACEDIR)/app/dltest2/dltest2 \ 117 $(USPACEDIR)/app/trace/trace \ 118 $(USPACEDIR)/app/bdsh/bdsh \ 119 $(USPACEDIR)/app/klog/klog 120 121 RD_LIBS = \ 122 $(USPACEDIR)/lib/libc/shared/libc.so.0 \ 123 $(USPACEDIR)/lib/libtest/libtest.so.0 124 125 OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) 126 COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS)))) 127 128 .PHONY: all clean depend 129 130 all: image.boot 131 132 -include Makefile.depend 133 134 image.boot: image.raw 135 $(OBJCOPY) -O $(BFD) $< $@ 136 137 image.raw: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) 138 $(LD) -no-check-sections -N -T _link.ld -o $@ $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) 139 140 depend: 141 -makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null 37 142 38 143 clean: 39 rm -f $(USPACEDIR)/dist/srv/* 40 rm -f $(USPACEDIR)/dist/app/* 41 rm -f $(USPACEDIR)/dist/cfg/net/* 42 43 for file in $(RD_SRVS) ; do \ 144 -for file in $(RD_SRVS) ; do \ 44 145 rm -f $(USPACEDIR)/dist/srv/`basename $$file` ; \ 45 146 done 46 for file in $(RD_APPS) ; do \147 -for file in $(RD_APPS) ; do \ 47 148 rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \ 48 149 done 49 for file in $(NET_CFG) ; do \ 50 rm -f $(USPACEDIR)/dist/cfg/net/`basename $$file` ; \ 150 -rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) initrd.img image.raw image.boot Makefile.depend 151 152 _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_SRVS) $(RD_LIBS) $(RD_APPS) _link.ld.in 153 for file in $(RD_SRVS) ; do \ 154 cp $$file $(USPACEDIR)/dist/srv/ ; \ 51 155 done 52 rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(RAW) $(COMPS).h $(COMPS).c $(LINK) $(INITRD).img $(INITRD).fs 53 find . -name '*.o' -follow -exec rm \{\} \; 54 find . -name '*.co' -follow -exec rm \{\} \; 156 for lib in $(RD_LIBS) ; do \ 157 cp $$lib $(USPACEDIR)/dist/lib/ ; \ 158 done 159 for file in $(RD_APPS) ; do \ 160 cp $$file $(USPACEDIR)/dist/app/ ; \ 161 done 162 ifeq ($(RDFMT),tmpfs) 163 ../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs 164 endif 165 ifeq ($(RDFMT),fat) 166 ../../../../tools/mkfat.py $(USPACEDIR)/dist/ initrd.fs 167 endif 168 ../../../../tools/mkhord.py 16384 initrd.fs initrd.img 169 rm initrd.fs 170 ../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned int" $(COMPONENTS) ./initrd.img 171 172 %.o: %.S 173 $(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@ 174 175 %.o: %.c 176 $(CC) $(DEFS) $(CFLAGS) -c $< -o $@ -
defaults/amd64/Makefile.config
r7308e84 r04803bf 3 3 4 4 # Ramdisk format 5 RDFMT = fat5 RDFMT = tmpfs 6 6 7 7 # Compiler … … 59 59 CONFIG_VESA_BPP = 16 60 60 61 # Use shared C library 62 CONFIG_SHARED_LIBC = n 63 61 64 # Load disk drivers on startup 62 65 CONFIG_START_BD = n -
defaults/arm32/Makefile.config
r7308e84 r04803bf 3 3 4 4 # Ramdisk format 5 RDFMT = fat5 RDFMT = tmpfs 6 6 7 7 # Compiler … … 35 35 CONFIG_HID_OUT = generic 36 36 37 # Use shared C library 38 CONFIG_SHARED_LIBC = n 39 37 40 # Load disk drivers on startup 38 41 CONFIG_START_BD = n -
defaults/ia32/Makefile.config
r7308e84 r04803bf 6 6 7 7 # Ramdisk format 8 RDFMT = fat8 RDFMT = tmpfs 9 9 10 10 # Compiler … … 65 65 CONFIG_VESA_BPP = 16 66 66 67 # Use shared C library 68 CONFIG_SHARED_LIBC = n 69 67 70 # Load disk drivers on startup 68 71 CONFIG_START_BD = n -
defaults/ia64/Makefile.config
r7308e84 r04803bf 3 3 4 4 # Ramdisk format 5 RDFMT = fat5 RDFMT = tmpfs 6 6 7 7 # Compiler … … 47 47 CONFIG_HID_OUT = generic 48 48 49 # Use shared C library 50 CONFIG_SHARED_LIBC = n 51 49 52 # Load disk drivers on startup 50 53 CONFIG_START_BD = n -
defaults/mips32/Makefile.config
r7308e84 r04803bf 3 3 4 4 # Ramdisk format 5 RDFMT = fat5 RDFMT = tmpfs 6 6 7 7 # Compiler … … 41 41 CONFIG_HID_OUT = generic 42 42 43 # Use shared C library 44 CONFIG_SHARED_LIBC = n 45 43 46 # Load disk drivers on startup 44 47 CONFIG_START_BD = n -
defaults/ppc32/Makefile.config
r7308e84 r04803bf 3 3 4 4 # Ramdisk format 5 RDFMT = fat5 RDFMT = tmpfs 6 6 7 7 # Compiler … … 41 41 CONFIG_BAT = y 42 42 43 # Use shared C library 44 CONFIG_SHARED_LIBC = n 45 43 46 # Load disk drivers on startup 44 47 CONFIG_START_BD = n -
kernel/arch/ia32/include/barrier.h
r7308e84 r04803bf 54 54 NO_TRACE static inline void cpuid_serialization(void) 55 55 { 56 #ifndef __IN_SHARED_LIBC__ 56 57 asm volatile ( 57 58 "xorl %%eax, %%eax\n" … … 59 60 ::: "eax", "ebx", "ecx", "edx", "memory" 60 61 ); 62 #else 63 /* Must not clobber PIC register ebx */ 64 asm volatile ( 65 "movl %%ebx, %%esi\n" 66 "xorl %%eax, %%eax\n" 67 "cpuid\n" 68 "movl %%esi, %%ebx\n" 69 ::: "eax", "ecx", "edx", "esi", "memory" 70 ); 71 #endif 61 72 } 62 73 -
kernel/generic/include/syscall/syscall.h
r7308e84 r04803bf 90 90 SYS_SYSINFO_GET_DATA, 91 91 92 SYS_DEBUG_PUTINT, 92 93 SYS_DEBUG_ENABLE_CONSOLE, 93 94 SYS_DEBUG_DISABLE_CONSOLE, -
kernel/generic/src/syscall/syscall.c
r7308e84 r04803bf 55 55 #include <console/console.h> 56 56 #include <udebug/udebug.h> 57 58 /** Print a hex integer into klog */ 59 static sysarg_t sys_debug_putint(sysarg_t i) 60 { 61 printf("[task:0x%x]", i); 62 return 0; 63 } 57 64 58 65 /** Dispatch system call */ … … 180 187 181 188 /* Debug calls */ 189 (syshandler_t) sys_debug_putint, 182 190 (syshandler_t) sys_debug_enable_console, 183 191 (syshandler_t) sys_debug_disable_console -
uspace/Makefile
r7308e84 r04803bf 35 35 DIRS = \ 36 36 app/bdsh \ 37 app/dload \ 38 app/dltest2 \ 37 39 app/edit \ 38 40 app/getterm \ … … 92 94 drv/test2 93 95 96 ## Shared C library 97 ifeq ($(CONFIG_BUILD_SHARED_LIBC), y) 98 DIRS += \ 99 lib/c/shared \ 100 app/dltest 101 endif 102 94 103 ## Networking 95 104 # … … 146 155 lib/softint \ 147 156 lib/softfloat \ 157 lib/libtest \ 148 158 lib/drv \ 149 159 lib/packet \ -
uspace/lib/c/Makefile
r7308e84 r04803bf 34 34 INCLUDE_ARCH = include/arch 35 35 INCLUDE_LIBARCH = include/libarch 36 INCLUDE_RTLDARCH = rtld/include/arch 36 37 37 38 COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common … … 41 42 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config 42 43 43 PRE_DEPEND = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $( COMMON_HEADER_ARCH)44 PRE_DEPEND = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(INCLUDE_RTLDARCH) $(COMMON_HEADER_ARCH) 44 45 EXTRA_OUTPUT = $(LINKER_SCRIPT) 45 EXTRA_CLEAN = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $( COMMON_HEADER_ARCH) $(LINKER_SCRIPT)46 EXTRA_CLEAN = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(INCLUDE_RTLDARCH) $(COMMON_HEADER_ARCH) $(LINKER_SCRIPT) 46 47 LIBRARY = libc 47 48 … … 49 50 -include $(CONFIG_MAKEFILE) 50 51 -include arch/$(UARCH)/Makefile.inc 52 -include rtld/arch/$(UARCH)/Makefile.inc 53 54 EXTRA_CFLAGS += -Irtld/include -I../../srv/loader/include 51 55 52 56 GENERIC_SOURCES = \ … … 60 64 generic/device/hw_res.c \ 61 65 generic/device/char_dev.c \ 66 generic/dlfcn.c \ 62 67 generic/event.c \ 63 68 generic/errno.c \ … … 112 117 generic/arg_parse.c \ 113 118 generic/sort.c \ 114 generic/stats.c 119 generic/stats.c \ 120 rtld/rtld.c \ 121 rtld/elf_load.c \ 122 rtld/dynamic.c \ 123 rtld/module.c \ 124 rtld/symbol.c 115 125 116 126 SOURCES = \ … … 126 136 ln -sfn ../$< $@ 127 137 138 $(INCLUDE_RTLDARCH): rtld/arch/$(UARCH)/include 139 ln -sfn ../../$< $@ 140 128 141 $(INCLUDE_KERNEL)/arch: ../../../kernel/generic/include/arch $(INCLUDE_KERNEL) 129 142 -
uspace/lib/c/arch/ia32/src/syscall.S
r7308e84 r04803bf 71 71 */ 72 72 .global __syscall_fast 73 .type __syscall_fast, @function 74 73 75 __syscall_fast: 74 76 pushl %ebx … … 95 97 popl %ebx 96 98 ret 99 100 .size __syscall_fast, . - __syscall_fast -
uspace/lib/c/arch/ia32/src/tls.c
r7308e84 r04803bf 37 37 #include <tls.h> 38 38 #include <sys/types.h> 39 #include <align.h> 39 40 40 41 tcb_t * __alloc_tls(void **data, size_t size) … … 48 49 } 49 50 51 //#ifdef __SHARED__ 52 53 typedef struct { 54 unsigned long int ti_module; 55 unsigned long int ti_offset; 56 } tls_index; 57 58 void __attribute__ ((__regparm__ (1))) 59 *___tls_get_addr(tls_index *ti); 60 61 void __attribute__ ((__regparm__ (1))) 62 *___tls_get_addr(tls_index *ti) 63 { 64 size_t tls_size; 65 uint8_t *tls; 66 67 /* Calculate size of TLS block */ 68 tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment); 69 70 /* The TLS block is just before TCB */ 71 tls = (uint8_t *)__tcb_get() - tls_size; 72 73 return tls + ti->ti_offset; 74 } 75 76 //#endif 77 50 78 /** @} 51 79 */ -
uspace/lib/c/arch/mips32/src/tls.c
r7308e84 r04803bf 47 47 } 48 48 49 typedef struct { 50 unsigned long ti_module; 51 unsigned long ti_offset; 52 } tls_index; 53 54 void *__tls_get_addr(tls_index *ti); 55 56 /* mips32 uses TLS variant 1 */ 57 void *__tls_get_addr(tls_index *ti) 58 { 59 uint8_t *tls; 60 uint32_t v; 61 62 tls = (uint8_t *)__tcb_get() + sizeof(tcb_t); 63 64 /* Hopefully this is right. No docs found. */ 65 v = (uint32_t) (tls + ti->ti_offset + 0x8000); 66 return (void *) v; 67 } 68 49 69 /** @} 50 70 */ -
uspace/lib/c/arch/ppc32/src/tls.c
r7308e84 r04803bf 1 1 /* 2 2 * Copyright (c) 2006 Ondrej Palkovsky 3 * Copyright (c) 2008 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 34 35 35 36 #include <tls.h> 37 #include <align.h> 36 38 #include <sys/types.h> 37 39 … … 46 48 } 47 49 50 static void kputint(unsigned i) 51 { 52 asm volatile ( 53 "mr %%r3, %0\n" 54 "li %%r9, 32\n" 55 "sc\n" 56 : 57 : "r" (i) 58 : "%r3","%r9" 59 ) ; 60 } 61 62 typedef struct { 63 unsigned long int ti_module; 64 unsigned long int ti_offset; 65 } tls_index; 66 67 void *__tls_get_addr(tls_index *ti); 68 69 /* ppc32 uses TLS variant 1 */ 70 void *__tls_get_addr(tls_index *ti) 71 { 72 uint8_t *tls; 73 74 /* The TLS section is just after TCB */ 75 tls = (uint8_t *)__tcb_get() + sizeof(tcb_t); 76 77 /* Hopefully this is right. No docs found. */ 78 return tls + ti->ti_offset + 32768; 79 } 80 48 81 /** @} 49 82 */ -
uspace/lib/c/generic/libc.c
r7308e84 r04803bf 53 53 #include "private/io.h" 54 54 55 /* From librtld. */ 56 #include <rtld.h> 57 //#include <string.h> 58 55 59 static bool env_setup = false; 56 60 … … 77 81 char **argv; 78 82 83 #ifdef __IN_SHARED_LIBC__ 84 if (__pcb != NULL && __pcb->rtld_runtime != NULL) { 85 runtime_env = (runtime_env_t *) __pcb->rtld_runtime; 86 } 87 #endif 79 88 /* 80 89 * Get command line arguments and initialize -
uspace/lib/c/include/as.h
r7308e84 r04803bf 56 56 extern void *as_area_create(void *address, size_t size, int flags); 57 57 extern int as_area_resize(void *address, size_t size, int flags); 58 externint as_area_change_flags(void *address, int flags);58 int as_area_change_flags(void *address, int flags); 59 59 extern int as_area_destroy(void *address); 60 60 extern void *set_maxheapsize(size_t mhs); -
uspace/lib/c/include/loader/pcb.h
r7308e84 r04803bf 72 72 /** Pointer to ELF dynamic section of the program. */ 73 73 void *dynamic; 74 /** Pointer to dynamic linker state structure (runtime_env_t). */ 75 void *rtld_runtime; 74 76 } pcb_t; 75 77 -
uspace/srv/loader/elf_load.c
r7308e84 r04803bf 103 103 * 104 104 */ 105 int elf_load_file(const char *file_name, size_t so_bias, elf_info_t *info) 105 int elf_load_file(const char *file_name, size_t so_bias, eld_flags_t flags, 106 elf_info_t *info) 106 107 { 107 108 elf_ld_t elf; … … 118 119 elf.fd = fd; 119 120 elf.info = info; 121 elf.flags = flags; 120 122 121 123 rc = elf_load(&elf, so_bias); … … 124 126 125 127 return rc; 126 }127 128 /** Run an ELF executable.129 *130 * Transfers control to the entry point of an ELF executable loaded131 * earlier with elf_load_file(). This function does not return.132 *133 * @param info Info structure filled earlier by elf_load_file()134 *135 */136 void elf_run(elf_info_t *info, pcb_t *pcb)137 {138 program_run(info->entry, pcb);139 140 /* not reached */141 128 } 142 129 … … 153 140 pcb->entry = info->entry; 154 141 pcb->dynamic = info->dynamic; 142 pcb->rtld_runtime = NULL; 155 143 } 156 144 … … 306 294 break; 307 295 case PT_INTERP: 308 /* Assume silently interp == "/ rtld.so" */309 elf->info->interp = "/ rtld.so";296 /* Assume silently interp == "/app/dload" */ 297 elf->info->interp = "/app/dload"; 310 298 break; 311 299 case PT_DYNAMIC: 300 /* Record pointer to dynamic section into info structure */ 301 elf->info->dynamic = 302 (void *)((uint8_t *)entry->p_vaddr + elf->bias); 303 DPRINTF("dynamic section found at 0x%x\n", 304 (uintptr_t)elf->info->dynamic); 305 break; 306 case 0x70000000: 307 /* FIXME: MIPS reginfo */ 308 break; 312 309 case PT_SHLIB: 313 case PT_LOPROC:314 case PT_HIPROC:310 // case PT_LOPROC: 311 // case PT_HIPROC: 315 312 default: 316 313 DPRINTF("Segment p_type %d unknown.\n", entry->p_type); … … 383 380 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 384 381 if (a == (void *)(-1)) { 385 DPRINTF("Memory mapping failed.\n"); 382 DPRINTF("memory mapping failed (0x%x, %d)\n", 383 base+bias, mem_sz); 386 384 return EE_MEMORY; 387 385 } … … 425 423 } 426 424 425 /* 426 * The caller wants to modify the segments first. He will then 427 * need to set the right access mode and ensure SMC coherence. 428 */ 429 if ((elf->flags & ELDF_RW) != 0) return EE_OK; 430 431 // printf("set area flags to %d\n", flags); 427 432 rc = as_area_change_flags(seg_ptr, flags); 428 433 if (rc != 0) { -
uspace/srv/loader/include/elf_load.h
r7308e84 r04803bf 43 43 #include "elf.h" 44 44 45 typedef enum { 46 /** Leave all segments in RW access mode. */ 47 ELDF_RW = 1 48 } eld_flags_t; 49 45 50 /** 46 51 * Some data extracted from the headers are stored here … … 67 72 uintptr_t bias; 68 73 74 /** Flags passed to the ELF loader. */ 75 eld_flags_t flags; 76 69 77 /** A copy of the ELF file header */ 70 78 elf_header_t *header; … … 74 82 } elf_ld_t; 75 83 76 int elf_load_file(const char *file_name, size_t so_bias, el f_info_t *info);77 void elf_run(elf_info_t *info, pcb_t *pcb);84 int elf_load_file(const char *file_name, size_t so_bias, eld_flags_t flags, 85 elf_info_t *info); 78 86 void elf_create_pcb(elf_info_t *info, pcb_t *pcb); 79 87 -
uspace/srv/loader/main.c
r7308e84 r04803bf 65 65 #define DPRINTF(...) 66 66 67 void program_run(void *entry, pcb_t *pcb); 68 67 69 /** Pathname of the file that will be loaded */ 68 70 static char *pathname = NULL; … … 283 285 int rc; 284 286 285 rc = elf_load_file(pathname, 0, &prog_info);287 rc = elf_load_file(pathname, 0, 0, &prog_info); 286 288 if (rc != EE_OK) { 287 289 DPRINTF("Failed to load executable '%s'.\n", pathname); … … 307 309 } 308 310 309 rc = elf_load_file(prog_info.interp, 0, &interp_info); 311 printf("Load ELF interpreter '%s'\n", prog_info.interp); 312 rc = elf_load_file(prog_info.interp, 0, 0, &interp_info); 310 313 if (rc != EE_OK) { 311 314 DPRINTF("Failed to load interpreter '%s.'\n", … … 315 318 } 316 319 320 printf("Run interpreter.\n"); 321 printf("entry point: 0x%lx\n", (unsigned long) interp_info.entry); 322 printf("pcb address: 0x%lx\n", (unsigned long) &pcb); 323 printf("prog dynamic: 0x%lx\n", (unsigned long) prog_info.dynamic); 324 317 325 is_dyn_linked = true; 318 326 async_answer_0(rid, EOK); … … 343 351 344 352 async_answer_0(rid, EOK); 345 elf_run(&interp_info, &pcb);353 program_run(interp_info.entry, &pcb); 346 354 } else { 347 355 /* Statically linked program */ 348 356 async_answer_0(rid, EOK); 349 elf_run(&prog_info, &pcb);357 program_run(prog_info.entry, &pcb); 350 358 } 351 359
Note:
See TracChangeset
for help on using the changeset viewer.