diff --git a/src/tests/kernel/boot/loader/Handle.cpp b/src/tests/kernel/boot/loader/Handle.cpp new file mode 100644 index 0000000000..b027c4a2b1 --- /dev/null +++ b/src/tests/kernel/boot/loader/Handle.cpp @@ -0,0 +1,70 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include "Handle.h" + +#include +#include + +#include +#include + + +Handle::Handle(int handle, bool takeOwnership) + : + fHandle(handle), + fOwnHandle(takeOwnership) +{ +} + + +Handle::Handle(void) + : + fHandle(0) +{ +} + + +Handle::~Handle() +{ + if (fOwnHandle) + close(fHandle); +} + + +void +Handle::SetHandle(int handle, bool takeOwnership) +{ + if (fHandle && fOwnHandle) + close(fHandle); + + fHandle = handle; + fOwnHandle = takeOwnership; +} + + +ssize_t +Handle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize) +{ + return pread(fHandle, buffer, bufferSize, pos); +} + + +ssize_t +Handle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize) +{ + return pwrite(fHandle, buffer, bufferSize, pos); +} + + +off_t +Handle::Size() const +{ + // ToDo: fix this! + return 1024LL * 1024 * 1024 * 1024; + // 1024 GB +} + diff --git a/src/tests/kernel/boot/loader/Handle.h b/src/tests/kernel/boot/loader/Handle.h new file mode 100644 index 0000000000..bdf2d59703 --- /dev/null +++ b/src/tests/kernel/boot/loader/Handle.h @@ -0,0 +1,34 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ +#ifndef HANDLE_H +#define HANDLE_H + + +#include + + +#ifdef __cplusplus + +class Handle : public Node { + public: + Handle(int handle, bool takeOwnership = true); + Handle(); + virtual ~Handle(); + + void SetHandle(int handle, bool takeOwnership = true); + + virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize); + virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize); + + virtual off_t Size() const; + + protected: + int fHandle; + bool fOwnHandle; +}; + +#endif /* __cplusplus */ + +#endif /* HANDLE_H */ diff --git a/src/tests/kernel/boot/loader/Jamfile b/src/tests/kernel/boot/loader/Jamfile new file mode 100644 index 0000000000..e631f18760 --- /dev/null +++ b/src/tests/kernel/boot/loader/Jamfile @@ -0,0 +1,56 @@ +SubDir OBOS_TOP src tests kernel boot loader ; + +UsePrivateHeaders [ FDirName kernel ] ; +UsePrivateHeaders [ FDirName kernel disk_device_manager ] ; +UsePrivateHeaders [ FDirName storage ] ; +SubDirHdrs $(OBOS_TOP) headers private kernel arch $(OBOS_ARCH) ; + +ObjectDefines + heap.cpp + main.cpp + vfs.cpp + partitions.cpp + stdio.cpp + RootFileSystem.cpp + : + malloc=boot_malloc free=boot_free + read_pos=boot_read_pos close=boot_close + ; + +# This lets the correct stdio.h header be available +# on the build platform. +# This will be fixed with the move to GNU's stdio header +if $(OS) = "LINUX" { +# SubDirC++Flags -include /usr/include/stdio.h ; +} else { + SubDirC++Flags -include /boot/develop/headers/posix/stdio.h ; +} + +SimpleTest BootLoaderTest : + platform_start.cpp + #platform_console.cpp + platform_debug.cpp + platform_devices.cpp + platform_heap.cpp + Handle.cpp + + main.cpp + vfs.cpp + partitions.cpp + heap.cpp + RootFileSystem.cpp + + list.c + : + : -fno-builtin + ; + +# Tell Jam where to find the utility sources +SEARCH on [ FGristFiles list.c ] + = [ FDirName $(OBOS_TOP) src kernel core util ] ; + +SEARCH on [ FGristFiles + main.cpp vfs.cpp partitions.cpp + heap.cpp RootFileSystem.cpp + ] = [ FDirName $(OBOS_TOP) src kernel boot loader ] ; + diff --git a/src/tests/kernel/boot/loader/platform_debug.cpp b/src/tests/kernel/boot/loader/platform_debug.cpp new file mode 100644 index 0000000000..500293ca76 --- /dev/null +++ b/src/tests/kernel/boot/loader/platform_debug.cpp @@ -0,0 +1,34 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include + +#include +#include + + +void +panic(const char *format, ...) +{ + va_list args; + + puts("*** PANIC ***"); + va_start(args, format); + vprintf(format, args); + va_end(args); +} + + +void +dprintf(const char *format, ...) +{ + va_list args; + + va_start(args, format); + vprintf(format, args); + va_end(args); +} + diff --git a/src/tests/kernel/boot/loader/platform_devices.cpp b/src/tests/kernel/boot/loader/platform_devices.cpp new file mode 100644 index 0000000000..755cfa15b7 --- /dev/null +++ b/src/tests/kernel/boot/loader/platform_devices.cpp @@ -0,0 +1,16 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include + + +status_t +platform_get_boot_devices(struct stage2_args *args, struct list *list) +{ + return B_OK; +} + + diff --git a/src/tests/kernel/boot/loader/platform_heap.cpp b/src/tests/kernel/boot/loader/platform_heap.cpp new file mode 100644 index 0000000000..5c2b5169c9 --- /dev/null +++ b/src/tests/kernel/boot/loader/platform_heap.cpp @@ -0,0 +1,29 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include +#include + +#define HEAP_SIZE 32768 + + +extern "C" void +platform_release_heap(void *base) +{ + free(base); +} + + +extern "C" status_t +platform_init_heap(struct stage2_args *args, void **_base, void **_top) +{ + *_base = malloc(HEAP_SIZE); + *_top = (void *)((uint8 *)*_base + HEAP_SIZE); + + return B_OK; +} + + diff --git a/src/tests/kernel/boot/loader/platform_stage2_args.h b/src/tests/kernel/boot/loader/platform_stage2_args.h new file mode 100644 index 0000000000..21d4b99845 --- /dev/null +++ b/src/tests/kernel/boot/loader/platform_stage2_args.h @@ -0,0 +1,12 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ +#ifndef PLATFORM_STAGE2_ARGS_H +#define PLATFORM_STAGE2_ARGS_H + +struct platform_stage2_args { + /* they are just empty! */ +}; + +#endif /* PLATFORM_STAGE2_ARGS_H */ diff --git a/src/tests/kernel/boot/loader/platform_start.cpp b/src/tests/kernel/boot/loader/platform_start.cpp new file mode 100644 index 0000000000..f1af620dbf --- /dev/null +++ b/src/tests/kernel/boot/loader/platform_start.cpp @@ -0,0 +1,18 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include + + +extern "C" int boot(struct stage2_args *args); + +int +main(int argc, char **argv) +{ + boot(NULL); + return 0; +} +