diff --git a/src/tests/add-ons/kernel/kernelland_emu/Jamfile b/src/tests/add-ons/kernel/kernelland_emu/Jamfile index aa602ffa8f..0e08b9de14 100644 --- a/src/tests/add-ons/kernel/kernelland_emu/Jamfile +++ b/src/tests/add-ons/kernel/kernelland_emu/Jamfile @@ -5,9 +5,15 @@ UsePrivateHeaders shared ; SharedLibrary libkernelland_emu.so : condition_variable.cpp + debug.cpp + device_manager.cpp lock.cpp + low_resource_manager.cpp misc.cpp module.cpp + scheduler.cpp + slab.cpp + vm.cpp strlcpy.c khash.c diff --git a/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp b/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp index 4e92679240..7d14cb17e0 100644 --- a/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp +++ b/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp @@ -9,7 +9,6 @@ #include #include -#include #include // libroot @@ -231,7 +230,7 @@ ConditionVariable::_NotifyChecked(bool all, status_t result) // #pragma mark - -status_t +void condition_variable_init() { status_t error = sConditionVariableHash.Init(kConditionVariableHashSize); @@ -239,6 +238,4 @@ condition_variable_init() panic("condition_variable_init(): Failed to init hash table: %s", strerror(error)); } - - return error; } diff --git a/src/tests/add-ons/kernel/kernelland_emu/debug.cpp b/src/tests/add-ons/kernel/kernelland_emu/debug.cpp new file mode 100644 index 0000000000..367bcdc74e --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/debug.cpp @@ -0,0 +1,153 @@ +/* + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include +#include + +#include + + +bool gDebugOutputEnabled = true; + + +extern "C" uint64 +parse_expression(const char* arg) +{ + return strtoull(arg, NULL, 0); +} + + +extern "C" bool +set_debug_variable(const char* variableName, uint64 value) +{ + return true; +} + + +extern "C" bool +print_debugger_command_usage(const char* command) +{ + return true; +} + + +extern "C" status_t +add_debugger_command_etc(const char* name, debugger_command_hook func, + const char* description, const char* usage, uint32 flags) +{ + return B_OK; +} + + +extern "C" int +add_debugger_command(const char *name, int (*func)(int, char **), + const char *desc) +{ + return B_OK; +} + + +extern "C" int +remove_debugger_command(const char * name, int (*func)(int, char **)) +{ + return B_OK; +} + + +extern "C" void +panic(const char *format, ...) +{ + char buffer[1024]; + + strcpy(buffer, "PANIC: "); + int32 prefixLen = strlen(buffer); + int bufferSize = sizeof(buffer) - prefixLen; + + va_list args; + va_start(args, format); + vsnprintf(buffer + prefixLen, bufferSize - 1, format, args); + va_end(args); + + buffer[sizeof(buffer) - 1] = '\0'; + + debugger(buffer); +} + + +void +kernel_debugger(const char *message) +{ + debugger(message); +} + + +extern "C" void +dprintf(const char *format,...) +{ + if (!gDebugOutputEnabled) + return; + + va_list args; + va_start(args, format); + printf("\33[34m"); + vprintf(format, args); + printf("\33[0m"); + fflush(stdout); + va_end(args); +} + + +extern "C" void +kprintf(const char *format,...) +{ + va_list args; + va_start(args, format); + printf("\33[35m"); + vprintf(format, args); + printf("\33[0m"); + fflush(stdout); + va_end(args); +} + + +extern "C" void +dump_block(const char *buffer, int size, const char *prefix) +{ + const int DUMPED_BLOCK_SIZE = 16; + int i; + + for (i = 0; i < size;) { + int start = i; + + dprintf(prefix); + for (; i < start + DUMPED_BLOCK_SIZE; i++) { + if (!(i % 4)) + dprintf(" "); + + if (i >= size) + dprintf(" "); + else + dprintf("%02x", *(unsigned char *)(buffer + i)); + } + dprintf(" "); + + for (i = start; i < start + DUMPED_BLOCK_SIZE; i++) { + if (i < size) { + char c = buffer[i]; + + if (c < 30) + dprintf("."); + else + dprintf("%c", c); + } else + break; + } + dprintf("\n"); + } +} diff --git a/src/tests/add-ons/kernel/kernelland_emu/device_manager.cpp b/src/tests/add-ons/kernel/kernelland_emu/device_manager.cpp new file mode 100644 index 0000000000..ba28abb133 --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/device_manager.cpp @@ -0,0 +1,31 @@ +/* + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include + +#include + + +extern "C" status_t +devfs_unpublish_partition(const char *path) +{ + printf("unpublish partition: %s\n", path); + return B_OK; +} + + +extern "C" status_t +devfs_publish_partition(const char *path, const partition_info *info) +{ + if (info == NULL) + return B_BAD_VALUE; + + printf("publish partition: %s (device \"%s\", size %Ld)\n", path, info->device, info->size); + return B_OK; +} diff --git a/src/tests/add-ons/kernel/kernelland_emu/low_resource_manager.cpp b/src/tests/add-ons/kernel/kernelland_emu/low_resource_manager.cpp new file mode 100644 index 0000000000..f4d025fb03 --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/low_resource_manager.cpp @@ -0,0 +1,39 @@ +/* + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include + + +extern "C" int32 +low_resource_state(uint32 resources) +{ + return B_NO_LOW_RESOURCE; +} + + +extern "C" void +low_resource(uint32 resource, uint64 requirements, uint32 flags, + uint32 timeout) +{ +} + + +extern "C" status_t +register_low_resource_handler(low_resource_func function, void *data, + uint32 resources, int32 priority) +{ + return B_OK; +} + + +extern "C" status_t +unregister_low_resource_handler(low_resource_func function, void *data) +{ + return B_OK; +} diff --git a/src/tests/add-ons/kernel/kernelland_emu/misc.cpp b/src/tests/add-ons/kernel/kernelland_emu/misc.cpp index 903f7f1c24..193745598a 100644 --- a/src/tests/add-ons/kernel/kernelland_emu/misc.cpp +++ b/src/tests/add-ons/kernel/kernelland_emu/misc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008, Haiku Inc. All Rights Reserved. + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. * Distributed under the terms of the MIT license. * * Authors: @@ -12,15 +12,6 @@ #include #include -#include - -#include -#include -#include -#include - - -bool gDebugOutputEnabled = true; thread_id @@ -31,316 +22,8 @@ spawn_kernel_thread(thread_func func, const char *name, int32 priority, } -extern "C" status_t -devfs_unpublish_partition(const char *path) -{ - printf("unpublish partition: %s\n", path); - return B_OK; -} - - -extern "C" status_t -devfs_publish_partition(const char *path, const partition_info *info) -{ - if (info == NULL) - return B_BAD_VALUE; - - printf("publish partition: %s (device \"%s\", size %Ld)\n", path, info->device, info->size); - return B_OK; -} - - -extern "C" int32 -atomic_test_and_set(vint32 *value, int32 newValue, int32 testAgainst) -{ -#if __INTEL__ - int32 oldValue; - asm volatile("lock; cmpxchg %%ecx, (%%edx)" - : "=a" (oldValue) : "a" (testAgainst), "c" (newValue), "d" (value)); - return oldValue; -#else -#warn "atomic_test_and_set() won't work correctly!" - int32 oldValue = *value; - if (oldValue == testAgainst) - *value = newValue; - - return oldValue; -#endif -} - - extern "C" int send_signal_etc(pid_t thread, uint signal, uint32 flags) { return send_signal(thread, signal); } - - -extern "C" int32 -low_resource_state(uint32 resources) -{ - return B_NO_LOW_RESOURCE; -} - - -extern "C" void -low_resource(uint32 resource, uint64 requirements, uint32 flags, - uint32 timeout) -{ -} - - -extern "C" status_t -register_low_resource_handler(low_resource_func function, void *data, - uint32 resources, int32 priority) -{ - return B_OK; -} - - -extern "C" status_t -unregister_low_resource_handler(low_resource_func function, void *data) -{ - return B_OK; -} - - -extern "C" void -panic(const char *format, ...) -{ - va_list args; - - puts("*** PANIC ***"); - va_start(args, format); - vprintf(format, args); - va_end(args); - - putchar('\n'); - debugger("Kernel Panic"); -} - - -extern "C" void -dprintf(const char *format,...) -{ - if (!gDebugOutputEnabled) - return; - - va_list args; - va_start(args, format); - printf("\33[34m"); - vprintf(format, args); - printf("\33[0m"); - fflush(stdout); - va_end(args); -} - - -extern "C" void -kprintf(const char *format,...) -{ - va_list args; - va_start(args, format); - printf("\33[35m"); - vprintf(format, args); - printf("\33[0m"); - fflush(stdout); - va_end(args); -} - - -extern "C" void -dump_block(const char *buffer, int size, const char *prefix) -{ - const int DUMPED_BLOCK_SIZE = 16; - int i; - - for (i = 0; i < size;) { - int start = i; - - dprintf(prefix); - for (; i < start + DUMPED_BLOCK_SIZE; i++) { - if (!(i % 4)) - dprintf(" "); - - if (i >= size) - dprintf(" "); - else - dprintf("%02x", *(unsigned char *)(buffer + i)); - } - dprintf(" "); - - for (i = start; i < start + DUMPED_BLOCK_SIZE; i++) { - if (i < size) { - char c = buffer[i]; - - if (c < 30) - dprintf("."); - else - dprintf("%c", c); - } else - break; - } - dprintf("\n"); - } -} - - -extern "C" status_t -user_memcpy(void *to, const void *from, size_t size) -{ - char *tmp = (char *)to; - char *s = (char *)from; - - while (size--) - *tmp++ = *s++; - - return 0; -} - - -extern "C" int -user_strcpy(char *to, const char *from) -{ - while ((*to++ = *from++) != '\0') - ; - return 0; -} - - -/*! \brief Copies at most (\a size - 1) characters from the string in \a from to - the string in \a to, NULL-terminating the result. - - \param to Pointer to the destination C-string. - \param from Pointer to the source C-string. - \param size Size in bytes of the string buffer pointed to by \a to. - - \return strlen(\a from). -*/ -extern "C" ssize_t -user_strlcpy(char *to, const char *from, size_t size) -{ - int from_length = 0; - - if (size > 0) { - to[--size] = '\0'; - // copy - for ( ; size; size--, from_length++, to++, from++) { - if ((*to = *from) == '\0') - break; - } - } - // count any leftover from chars - while (*from++ != '\0') - from_length++; - - return from_length; -} - - -// #pragma mark - Debugger - - -extern "C" uint64 -parse_expression(const char* arg) -{ - return strtoull(arg, NULL, 0); -} - - -extern "C" bool -set_debug_variable(const char* variableName, uint64 value) -{ - return true; -} - - -extern "C" bool -print_debugger_command_usage(const char* command) -{ - return true; -} - - -extern "C" status_t -add_debugger_command_etc(const char* name, debugger_command_hook func, - const char* description, const char* usage, uint32 flags) -{ - return B_OK; -} - - -extern "C" int -add_debugger_command(const char *name, int (*func)(int, char **), - const char *desc) -{ - return B_OK; -} - - -extern "C" int -remove_debugger_command(const char * name, int (*func)(int, char **)) -{ - return B_OK; -} - - -// #pragma mark - Slab allocator - - -extern "C" void * -object_cache_alloc(object_cache *cache, uint32 flags) -{ - return malloc((size_t)cache); -} - - -extern "C" void -object_cache_free(object_cache *cache, void *object) -{ - free(object); -} - - -extern "C" object_cache * -create_object_cache_etc(const char *name, size_t objectSize, - size_t alignment, size_t maxByteUsage, uint32 flags, void *cookie, - object_cache_constructor constructor, object_cache_destructor destructor, - object_cache_reclaimer reclaimer) -{ - return (object_cache*)objectSize; -} - - -extern "C" object_cache * -create_object_cache(const char *name, size_t objectSize, - size_t alignment, void *cookie, object_cache_constructor constructor, - object_cache_destructor) -{ - return (object_cache*)objectSize; -} - - -extern "C" void -delete_object_cache(object_cache *cache) -{ -} - - -extern "C" void -object_cache_get_usage(object_cache *cache, size_t *_allocatedMemory) -{ - *_allocatedMemory = 100; -} - - -// #pragma mark - Thread/scheduler functions - - -struct scheduler_ops kScheduler = { - NULL, - NULL, - NULL, - NULL, -}; -struct scheduler_ops* gScheduler = &kScheduler; diff --git a/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp b/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp new file mode 100644 index 0000000000..99fa85abdc --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp @@ -0,0 +1,19 @@ +/* + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include + + +struct scheduler_ops kScheduler = { + NULL, + NULL, + NULL, + NULL, +}; +struct scheduler_ops* gScheduler = &kScheduler; diff --git a/src/tests/add-ons/kernel/kernelland_emu/slab.cpp b/src/tests/add-ons/kernel/kernelland_emu/slab.cpp new file mode 100644 index 0000000000..c94de217bb --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/slab.cpp @@ -0,0 +1,58 @@ +/* + * Copyright 2002-2008, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include + +#include + + +extern "C" void * +object_cache_alloc(object_cache *cache, uint32 flags) +{ + return malloc((size_t)cache); +} + + +extern "C" void +object_cache_free(object_cache *cache, void *object) +{ + free(object); +} + + +extern "C" object_cache * +create_object_cache_etc(const char *name, size_t objectSize, + size_t alignment, size_t maxByteUsage, uint32 flags, void *cookie, + object_cache_constructor constructor, object_cache_destructor destructor, + object_cache_reclaimer reclaimer) +{ + return (object_cache*)objectSize; +} + + +extern "C" object_cache * +create_object_cache(const char *name, size_t objectSize, + size_t alignment, void *cookie, object_cache_constructor constructor, + object_cache_destructor) +{ + return (object_cache*)objectSize; +} + + +extern "C" void +delete_object_cache(object_cache *cache) +{ +} + + +extern "C" void +object_cache_get_usage(object_cache *cache, size_t *_allocatedMemory) +{ + *_allocatedMemory = 100; +} diff --git a/src/tests/add-ons/kernel/kernelland_emu/vm.cpp b/src/tests/add-ons/kernel/kernelland_emu/vm.cpp new file mode 100644 index 0000000000..8c7d56c920 --- /dev/null +++ b/src/tests/add-ons/kernel/kernelland_emu/vm.cpp @@ -0,0 +1,27 @@ +/* + * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * Ingo Weinhold, bonefish@cs.tu-berlin.de. + * Axel Dörfler, axeld@pinc-software.de. + */ + +#include + +#include + + +extern "C" status_t +user_memcpy(void *to, const void *from, size_t size) +{ + memcpy(to, from, size); + return B_OK; +} + + +extern "C" ssize_t +user_strlcpy(char *to, const char *from, size_t size) +{ + return strlcpy(to, from, size); +}