From b106aa902f10aa4b60a1b19ad4615f504380ed57 Mon Sep 17 00:00:00 2001 From: Amit Mahajan Date: Tue, 8 Dec 2009 14:01:06 +0530 Subject: [PATCH] test and thread_demo container compiling, but crashing at runtime --- conts/baremetal/test/SConstruct | 12 +++- conts/baremetal/test/include/capability.h | 6 ++ conts/baremetal/test/main.c | 1 - conts/baremetal/test/src/capability.c | 78 +---------------------- conts/baremetal/test/src/captest.c | 7 +- conts/baremetal/threads_demo/SConstruct | 15 ++--- conts/baremetal/threads_demo/main.c | 2 +- conts/libl4/include/l4lib/thread/thread.h | 4 +- conts/libl4/src/thread/tcb.c | 2 +- conts/libl4/src/thread/thread.c | 2 - 10 files changed, 30 insertions(+), 99 deletions(-) create mode 100644 conts/baremetal/test/include/capability.h diff --git a/conts/baremetal/test/SConstruct b/conts/baremetal/test/SConstruct index 3d615b2..6e0d141 100644 --- a/conts/baremetal/test/SConstruct +++ b/conts/baremetal/test/SConstruct @@ -39,6 +39,11 @@ LIBDEV_LIBPATH = join(join(BUILDDIR, LIBDEV_RELDIR), 'sys-userspace') LIBDEV_INCLUDE = [join(LIBDEV_DIR, 'uart/include')] LIBDEV_CCFLAGS = '-DPLATFORM_' + platform.upper() +LIBMEM_RELDIR = 'conts/libmem' +LIBMEM_DIR = join(PROJROOT, LIBMEM_RELDIR) +LIBMEM_LIBPATH = join(BUILDDIR, LIBMEM_RELDIR) +LIBMEM_INCLUDE = LIBMEM_DIR + env = Environment(CC = config.user_toolchain + 'gcc', # We don't use -nostdinc because sometimes we need standard headers, # such as stdarg.h e.g. for variable args, as in printk(). @@ -48,9 +53,10 @@ env = Environment(CC = config.user_toolchain + 'gcc', ASFLAGS = ['-D__ASSEMBLY__'], \ PROGSUFFIX = '.elf', # The suffix to use for final executable\ ENV = {'PATH' : os.environ['PATH']}, # Inherit shell path\ - LIBS = ['gcc', 'libl4', 'c-userspace', 'libdev-userspace', 'gcc', 'c-userspace'], # libgcc.a - This is required for division routines. - CPPPATH = ["#include", KERNEL_INCLUDE, LIBL4_INCLUDE, LIBDEV_INCLUDE, LIBC_INCLUDE], - LIBPATH = [LIBL4_LIBPATH, LIBDEV_LIBPATH, LIBC_LIBPATH], + LIBS = ['gcc', 'libl4', 'c-userspace', 'libdev-userspace', 'gcc', 'libmalloc', + 'c-userspace'], # libgcc.a - This is required for division routines. + CPPPATH = ["#include", KERNEL_INCLUDE, LIBL4_INCLUDE, LIBDEV_INCLUDE, LIBC_INCLUDE, LIBMEM_INCLUDE], + LIBPATH = [LIBL4_LIBPATH, LIBDEV_LIBPATH, LIBC_LIBPATH, LIBMEM_LIBPATH], CPPFLAGS = '-include l4/config.h -include l4/macros.h -include l4/types.h') src = Glob('*.[cS]') diff --git a/conts/baremetal/test/include/capability.h b/conts/baremetal/test/include/capability.h new file mode 100644 index 0000000..f30cb58 --- /dev/null +++ b/conts/baremetal/test/include/capability.h @@ -0,0 +1,6 @@ +#ifndef __CAPABILITY_H__ +#define __CAPABILITY_H__ + +int caps_read_all(); + +#endif /* __CAPABILITY_H__ */ diff --git a/conts/baremetal/test/main.c b/conts/baremetal/test/main.c index aaa03ed..6b550bf 100644 --- a/conts/baremetal/test/main.c +++ b/conts/baremetal/test/main.c @@ -5,7 +5,6 @@ */ #include #include -#include #include #include #include diff --git a/conts/baremetal/test/src/capability.c b/conts/baremetal/test/src/capability.c index 44e1550..ee2b826 100644 --- a/conts/baremetal/test/src/capability.c +++ b/conts/baremetal/test/src/capability.c @@ -4,7 +4,7 @@ * Copyright (C) 2009 B Labs Ltd. */ #include -#include +#include #include static struct capability cap_array[30]; @@ -76,78 +76,6 @@ void cap_grant_single(struct capability *orig, struct capability *share, l4id_t #endif -void cap_print(struct capability *cap) -{ - printf("Capability id:\t\t\t%d\n", cap->capid); - printf("Capability resource id:\t\t%d\n", cap->resid); - printf("Capability owner id:\t\t%d\n",cap->owner); - - switch (cap_type(cap)) { - case CAP_TYPE_TCTRL: - printf("Capability type:\t\t%s\n", "Thread Control"); - break; - case CAP_TYPE_EXREGS: - printf("Capability type:\t\t%s\n", "Exchange Registers"); - break; - case CAP_TYPE_MAP_PHYSMEM: - printf("Capability type:\t\t%s\n", "Map/Physmem"); - break; - case CAP_TYPE_MAP_VIRTMEM: - printf("Capability type:\t\t%s\n", "Map/Virtmem"); - break; - - case CAP_TYPE_IPC: - printf("Capability type:\t\t%s\n", "Ipc"); - break; - case CAP_TYPE_UMUTEX: - printf("Capability type:\t\t%s\n", "Mutex"); - break; - case CAP_TYPE_QUANTITY: - printf("Capability type:\t\t%s\n", "Quantitative"); - break; - default: - printf("Capability type:\t\t%s\n", "Unknown"); - break; - } - - switch (cap_rtype(cap)) { - case CAP_RTYPE_THREAD: - printf("Capability resource type:\t%s\n", "Thread"); - break; - case CAP_RTYPE_TGROUP: - printf("Capability resource type:\t%s\n", "Thread Group"); - break; - case CAP_RTYPE_SPACE: - printf("Capability resource type:\t%s\n", "Space"); - break; - case CAP_RTYPE_CONTAINER: - printf("Capability resource type:\t%s\n", "Container"); - break; - case CAP_RTYPE_THREADPOOL: - printf("Capability resource type:\t%s\n", "Thread Pool"); - break; - case CAP_RTYPE_SPACEPOOL: - printf("Capability resource type:\t%s\n", "Space Pool"); - break; - case CAP_RTYPE_MUTEXPOOL: - printf("Capability resource type:\t%s\n", "Mutex Pool"); - break; - case CAP_RTYPE_MAPPOOL: - printf("Capability resource type:\t%s\n", "Map Pool (PMDS)"); - break; - case CAP_RTYPE_CPUPOOL: - printf("Capability resource type:\t%s\n", "Cpu Pool"); - break; - case CAP_RTYPE_CAPPOOL: - printf("Capability resource type:\t%s\n", "Capability Pool"); - break; - default: - printf("Capability resource type:\t%s\n", "Unknown"); - break; - } - printf("\n"); -} - int caps_read_all(void) { int ncaps; @@ -170,9 +98,7 @@ int caps_read_all(void) "complete CAP_CONTROL_READ_CAPS request.\n"); BUG(); } - - for (int i = 0; i < ncaps; i++) - cap_print(&cap_array[i]); + //cap_array_print(ncaps, caparray); return 0; } diff --git a/conts/baremetal/test/src/captest.c b/conts/baremetal/test/src/captest.c index b7bd7c9..816aedb 100644 --- a/conts/baremetal/test/src/captest.c +++ b/conts/baremetal/test/src/captest.c @@ -1,9 +1,10 @@ #include -#include #include +#include #include #include #include +#include int simple_pager_thread(void *arg) { @@ -55,10 +56,11 @@ int simple_pager_thread(void *arg) int wait_check_test(struct task_ids *ids) { +#if 0 int result; /* Wait for thread to finish */ - //result = l4_thread_control(THREAD_WAIT, ids); + result = l4_thread_control(THREAD_WAIT, ids); if (result < 0) { printf("Waiting on (%d)'s exit failed.\n", ids->tid); return -1; @@ -66,6 +68,7 @@ int wait_check_test(struct task_ids *ids) printf("Top-level test has failed\n"); } /* Else it is a success */ +#endif return 0; } diff --git a/conts/baremetal/threads_demo/SConstruct b/conts/baremetal/threads_demo/SConstruct index b497069..d1a2ac0 100644 --- a/conts/baremetal/threads_demo/SConstruct +++ b/conts/baremetal/threads_demo/SConstruct @@ -38,11 +38,6 @@ LIBDEV_LIBPATH = join(join(BUILDDIR, LIBDEV_RELDIR), 'sys-userspace') LIBDEV_INCLUDE = [join(LIBDEV_DIR, 'uart/include')] LIBDEV_CCFLAGS = '-DPLATFORM_' + platform.upper() -LIBL4THREAD_RELDIR = 'conts/libl4thread' -LIBL4THREAD_DIR = join(PROJROOT, LIBL4THREAD_RELDIR) -LIBL4THREAD_LIBPATH = join(BUILDDIR, LIBL4THREAD_RELDIR) -LIBL4THREAD_INCLUDE = join(LIBL4THREAD_DIR, 'include') - LIBMEM_RELDIR = 'conts/libmem' LIBMEM_DIR = join(PROJROOT, LIBMEM_RELDIR) LIBMEM_LIBPATH = join(BUILDDIR, LIBMEM_RELDIR) @@ -57,12 +52,10 @@ env = Environment(CC = config.user_toolchain + 'gcc', ASFLAGS = ['-D__ASSEMBLY__'], PROGSUFFIX = '.elf', # The suffix to use for final executable ENV = {'PATH' : os.environ['PATH']}, # Inherit shell path - LIBS = ['libl4thread', 'libl4', 'libmalloc', 'c-userspace', \ - 'libdev-userspace', 'gcc', 'c-userspace'], # libgcc.a - This is required for division routines. - CPPPATH = ["#include", KERNEL_INCLUDE, LIBL4_INCLUDE, LIBDEV_INCLUDE, \ - LIBC_INCLUDE, LIBL4THREAD_INCLUDE], - LIBPATH = [LIBL4_LIBPATH, LIBDEV_LIBPATH, LIBC_LIBPATH, LIBL4THREAD_LIBPATH, \ - LIBMEM_LIBPATH], + LIBS = ['libl4', 'libmalloc', 'c-userspace', 'libdev-userspace', \ + 'gcc', 'c-userspace'], # libgcc.a - This is required for division routines. + CPPPATH = ["#include", KERNEL_INCLUDE, LIBL4_INCLUDE, LIBDEV_INCLUDE, LIBC_INCLUDE], + LIBPATH = [LIBL4_LIBPATH, LIBDEV_LIBPATH, LIBC_LIBPATH, LIBMEM_LIBPATH], CPPFLAGS = '-include l4/config.h -include l4/macros.h -include l4/types.h') src = Glob('*.[cS]') diff --git a/conts/baremetal/threads_demo/main.c b/conts/baremetal/threads_demo/main.c index 272021e..cfe4f68 100644 --- a/conts/baremetal/threads_demo/main.c +++ b/conts/baremetal/threads_demo/main.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include /* Symbolic constants */ #define STACK_SIZE 0x1000 diff --git a/conts/libl4/include/l4lib/thread/thread.h b/conts/libl4/include/l4lib/thread/thread.h index 408e612..396c715 100644 --- a/conts/libl4/include/l4lib/thread/thread.h +++ b/conts/libl4/include/l4lib/thread/thread.h @@ -1,8 +1,8 @@ #ifndef __L4_THREAD_H__ #define __L4_THREAD_H__ -#include -#include +#include +#include struct l4_thread_struct { l4id_t tlid; /* Thread local id */ diff --git a/conts/libl4/src/thread/tcb.c b/conts/libl4/src/thread/tcb.c index 9cc822b..2804195 100644 --- a/conts/libl4/src/thread/tcb.c +++ b/conts/libl4/src/thread/tcb.c @@ -17,7 +17,7 @@ struct l4lib_global_list global_tasks = { }; /* Function definitions */ -void global_add_task(struct l4lib_tcb *task) +void l4lib_global_add_task(struct l4lib_tcb *task) { BUG_ON(!list_empty(&task->list)); list_insert_tail(&task->list, &global_tasks.list); diff --git a/conts/libl4/src/thread/thread.c b/conts/libl4/src/thread/thread.c index 5578936..7b5fb46 100644 --- a/conts/libl4/src/thread/thread.c +++ b/conts/libl4/src/thread/thread.c @@ -22,8 +22,6 @@ extern unsigned long lib_utcb_range_size; /* Static variable definitions */ struct l4_mutex lib_mutex; -extern void global_add_task(struct l4lib_tcb *task); - /* Function definitions */ int l4_thread_create(struct task_ids *ids, unsigned int flags, int (*func)(void *), void *arg)