genode/repos/base-sel4/src/test/sel4/thread.cc

63 lines
1.5 KiB
C++

/*
* \brief Implementation of the Thread API
* \author Norman Feske
* \date 2014-10-15
*/
/*
* Copyright (C) 2014 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include <base/thread.h>
#include <base/env.h>
#include <base/snprintf.h>
#include <util/string.h>
#include <util/misc_math.h>
using namespace Genode;
static Thread_base::Context *main_context()
{
enum { STACK_SIZE = sizeof(long)*4*1024 };
static long buffer[STACK_SIZE/sizeof(long)];
/* the context is located beyond the top of the stack */
addr_t const context_addr = (addr_t)buffer + sizeof(buffer)
- sizeof(Thread_base::Context);
Thread_base::Context *context = (Thread_base::Context *)context_addr;
context->stack_base = (addr_t)buffer;
return context;
}
Thread_base *Thread_base::myself() { return nullptr; }
void Thread_base::name(char *dst, size_t dst_len)
{
strncpy(dst, _context->name, dst_len);
}
Thread_base::Thread_base(size_t, const char *name, size_t stack_size, Type type,
Cpu_session *cpu_session)
:
_cpu_session(cpu_session), _context(main_context())
{
strncpy(_context->name, name, sizeof(_context->name));
_context->thread_base = this;
}
Thread_base::Thread_base(size_t quota, const char *name, size_t stack_size, Type type)
: Thread_base(quota, name, stack_size, type, nullptr) { }
Thread_base::~Thread_base() { }