From 5d83d63c081d7f50dfaa978ac17571a590f1cf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 3 Mar 2004 01:13:00 +0000 Subject: [PATCH] Renamed thread/team syscalls to new scheme. Removed old ERR_* error codes. Removed funny area names in rldheap.c. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6884 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/apps/rld/arch/x86/rldreloc.inc | 2 +- src/kernel/apps/rld/rldelf.c | 64 +++++++++++++---------- src/kernel/apps/rld/rldheap.c | 26 +++------ 3 files changed, 45 insertions(+), 47 deletions(-) diff --git a/src/kernel/apps/rld/arch/x86/rldreloc.inc b/src/kernel/apps/rld/arch/x86/rldreloc.inc index f63df9b770..ddd1a62772 100644 --- a/src/kernel/apps/rld/arch/x86/rldreloc.inc +++ b/src/kernel/apps/rld/arch/x86/rldreloc.inc @@ -74,7 +74,7 @@ relocate_rel(image_t *image, struct Elf32_Rel *rel, int rel_len) #endif default: printf("unhandled relocation type %d\n", ELF32_R_TYPE(rel[i].r_info)); - return ERR_NOT_ALLOWED; + return B_NOT_ALLOWED; } *P = final_val; diff --git a/src/kernel/apps/rld/rldelf.c b/src/kernel/apps/rld/rldelf.c index 71d2bee375..ee8848ef78 100644 --- a/src/kernel/apps/rld/rldelf.c +++ b/src/kernel/apps/rld/rldelf.c @@ -1,20 +1,29 @@ /* -** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2003-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + +/* ** Copyright 2002, Manuel J. Petit. All rights reserved. ** Copyright 2001, Travis Geiselbrecht. All rights reserved. ** Distributed under the terms of the NewOS License. */ -#include -#include -#include -#include +#ifdef _KERNEL_MODE +# undef _KERNEL_MODE +#endif + +#include + #include #include #include #include #include +#include +#include + #include "rld_priv.h" // ToDo: implement better locking strategy @@ -23,10 +32,9 @@ // sure that B_ADD_ON_IMAGE is set correctly // ToDo: implement search paths $LIBRARY_PATH, $ADDON_PATH -#define PAGE_SIZE 4096 -#define PAGE_MASK ((PAGE_SIZE)-1) -#define PAGE_OFFS(y) ((y)&(PAGE_MASK)) -#define PAGE_BASE(y) ((y)&~(PAGE_MASK)) +#define PAGE_MASK (B_PAGE_SIZE - 1) +#define PAGE_OFFS(y) ((y) & (PAGE_MASK)) +#define PAGE_BASE(y) ((y) & ~(PAGE_MASK)) /* david - added '_' to avoid macro's in kernel.h */ #define _ROUNDOWN(x,y) ((x)&~((y)-1)) @@ -130,7 +138,7 @@ static struct uspace_program_args const *gProgramArgs; #define FATAL(x,y...) \ if (x) { \ printf("rld.so: " y); \ - sys_exit(0); \ + _kern_exit(0); \ } @@ -147,7 +155,7 @@ rld_unlock() static void rld_lock() { - thread_id self = sys_get_current_thread_id(); + thread_id self = find_thread(NULL); if (self != rld_sem_owner) { acquire_sem(rld_sem); rld_sem_owner = self; @@ -243,21 +251,21 @@ static status_t parse_elf_header(struct Elf32_Ehdr *eheader, int32 *_pheaderSize, int32 *_sheaderSize) { if (memcmp(eheader->e_ident, ELF_MAGIC, 4) != 0) - return ERR_INVALID_BINARY; + return B_NOT_AN_EXECUTABLE; if (eheader->e_ident[4] != ELFCLASS32) - return ERR_INVALID_BINARY; + return B_NOT_AN_EXECUTABLE; if (eheader->e_phoff == 0) - return ERR_INVALID_BINARY; + return B_NOT_AN_EXECUTABLE; if (eheader->e_phentsize < sizeof(struct Elf32_Phdr)) - return ERR_INVALID_BINARY; + return B_NOT_AN_EXECUTABLE; *_pheaderSize = eheader->e_phentsize * eheader->e_phnum; *_sheaderSize = eheader->e_shentsize * eheader->e_shnum; - return *_pheaderSize > 0 && *_sheaderSize > 0 ? B_OK : ERR_INVALID_BINARY; + return *_pheaderSize > 0 && *_sheaderSize > 0 ? B_OK : B_NOT_AN_EXECUTABLE; } @@ -377,9 +385,9 @@ parse_program_headers(image_t *image, char *buff, int phnum, int phentsize) */ image->regions[regcount].start = pheader->p_vaddr; image->regions[regcount].size = pheader->p_memsz; - image->regions[regcount].vmstart = _ROUNDOWN(pheader->p_vaddr, PAGE_SIZE); + image->regions[regcount].vmstart = _ROUNDOWN(pheader->p_vaddr, B_PAGE_SIZE); image->regions[regcount].vmsize = _ROUNDUP(pheader->p_memsz + - (pheader->p_vaddr % PAGE_SIZE), PAGE_SIZE); + (pheader->p_vaddr % B_PAGE_SIZE), B_PAGE_SIZE); image->regions[regcount].fdstart = pheader->p_offset; image->regions[regcount].fdsize = pheader->p_filesz; image->regions[regcount].delta = 0; @@ -400,9 +408,9 @@ parse_program_headers(image_t *image, char *buff, int phnum, int phentsize) image->regions[regcount].start = pheader->p_vaddr; image->regions[regcount].size = pheader->p_filesz; - image->regions[regcount].vmstart = _ROUNDOWN(pheader->p_vaddr, PAGE_SIZE); + image->regions[regcount].vmstart = _ROUNDOWN(pheader->p_vaddr, B_PAGE_SIZE); image->regions[regcount].vmsize = _ROUNDUP (pheader->p_filesz + - (pheader->p_vaddr % PAGE_SIZE), PAGE_SIZE); + (pheader->p_vaddr % B_PAGE_SIZE), B_PAGE_SIZE); image->regions[regcount].fdstart = pheader->p_offset; image->regions[regcount].fdsize = pheader->p_filesz; image->regions[regcount].delta = 0; @@ -420,7 +428,9 @@ parse_program_headers(image_t *image, char *buff, int phnum, int phentsize) image->regions[regcount].start = pheader->p_vaddr; image->regions[regcount].size = pheader->p_memsz - pheader->p_filesz; image->regions[regcount].vmstart = image->regions[regcount-1].vmstart + image->regions[regcount-1].vmsize; - image->regions[regcount].vmsize = _ROUNDUP (pheader->p_memsz + (pheader->p_vaddr % PAGE_SIZE), PAGE_SIZE) - image->regions[regcount-1].vmsize; + image->regions[regcount].vmsize = _ROUNDUP(pheader->p_memsz + + (pheader->p_vaddr % B_PAGE_SIZE), B_PAGE_SIZE) + - image->regions[regcount-1].vmsize; image->regions[regcount].fdstart = 0; image->regions[regcount].fdsize = 0; image->regions[regcount].delta = 0; @@ -536,7 +546,7 @@ map_image(int fd, char const *path, image_t *image, bool fixed) LOCK_RW, REGION_PRIVATE_MAP, path, - _ROUNDOWN(image->regions[i].fdstart, PAGE_SIZE)); + _ROUNDOWN(image->regions[i].fdstart, B_PAGE_SIZE)); if (image->regions[i].id < 0) goto error; @@ -722,20 +732,20 @@ resolve_symbol(image_t *image, struct Elf32_Sym *sym, addr *sym_addr) sym2 = find_symbol_in_loaded_images(&shimg, symname); if (!sym2) { printf("elf_resolve_symbol: could not resolve symbol '%s'\n", symname); - return ERR_ELF_RESOLVING_SYMBOL; + return B_MISSING_SYMBOL; } // make sure they're the same type if (ELF32_ST_TYPE(sym->st_info) != STT_NOTYPE && ELF32_ST_TYPE(sym->st_info) != ELF32_ST_TYPE(sym2->st_info)) { printf("elf_resolve_symbol: found symbol '%s' in shared image but wrong type\n", symname); - return ERR_ELF_RESOLVING_SYMBOL; + return B_MISSING_SYMBOL; } if (ELF32_ST_BIND(sym2->st_info) != STB_GLOBAL && ELF32_ST_BIND(sym2->st_info) != STB_WEAK) { printf("elf_resolve_symbol: found symbol '%s' but not exported\n", symname); - return ERR_ELF_RESOLVING_SYMBOL; + return B_MISSING_SYMBOL; } *sym_addr = sym2->st_value + shimg->regions[0].delta; @@ -746,9 +756,9 @@ resolve_symbol(image_t *image, struct Elf32_Sym *sym, addr *sym_addr) return B_NO_ERROR; case SHN_COMMON: - // XXX finish this + // ToDo: finish this printf("elf_resolve_symbol: COMMON symbol, finish me!\n"); - return ERR_NOT_IMPLEMENTED_YET; + return B_ERROR; //ERR_NOT_IMPLEMENTED_YET; default: // standard symbol diff --git a/src/kernel/apps/rld/rldheap.c b/src/kernel/apps/rld/rldheap.c index dbb1110b22..32075e6cea 100644 --- a/src/kernel/apps/rld/rldheap.c +++ b/src/kernel/apps/rld/rldheap.c @@ -3,39 +3,27 @@ ** Distributed under the terms of the NewOS License. */ + #include #include #include "rld_priv.h" - -char const * const names[]= -{ - "I'm too sexy!", - "BEWARE OF THE DUCK!", - "B_DONT_DO_THAT", - "I need a girlfriend!", - "assert(C++--!=C)", - "5038 RIP Nov. 2001", - "1.e4 e5 2.Nf3 Nc6 3.Bb5", - "Press any key..." -}; #define RLD_SCRATCH_SIZE 65536 #define RLD_PROGRAM_BASE 0x00200000 /* keep in sync with app ldscript */ - -static region_id rld_region; -static region_id rld_region_2; -static char *rld_base; -static char *rld_base_2; -static char *rld_ptr; +static region_id rld_region; +static region_id rld_region_2; +static char *rld_base; +static char *rld_base_2; +static char *rld_ptr; void rldheap_init(void) { - rld_region = _kern_create_area((char *)names[sys_get_current_team_id() % (sizeof(names) / sizeof(names[0]))], + rld_region = _kern_create_area("rld scratch", (void **)&rld_base, B_ANY_ADDRESS, RLD_SCRATCH_SIZE, B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);