1,5 → 1,5 |
/* |
* Copyright (c) 2006 Ondrej Palkovsky |
* Copyright (c) 2007 Michal Kebrt |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
29,8 → 29,8 |
/** @addtogroup libcarm32 |
* @{ |
*/ |
/** @file |
* @ingroup libcarm32 |
/** @file |
* @brief psthread related declarations. |
*/ |
|
#ifndef LIBC_arm32_PSTHREAD_H_ |
40,13 → 40,23 |
#include <align.h> |
#include "thread.h" |
|
/** Size of a stack item */ |
#define STACK_ITEM_SIZE 4 |
|
/** see <a href="http://www.arm.com/support/faqdev/14269.html">ABI</a> for details */ |
/** Stack alignment - see <a href="http://www.arm.com/support/faqdev/14269.html">ABI</a> for details */ |
#define STACK_ALIGNMENT 8 |
|
#define SP_DELTA (0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT)) |
|
|
/** Sets data to the context. |
* |
* @param c Context (#context_t). |
* @param _pc Program counter. |
* @param stack Stack address. |
* @param size Stack size. |
* @param ptls Pointer to the TCB. |
*/ |
#define context_set(c, _pc, stack, size, ptls) \ |
(c)->pc = (sysarg_t) (_pc); \ |
(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
53,6 → 63,13 |
(c)->tls = ((sysarg_t)(ptls)) + sizeof(tcb_t) + ARM_TP_OFFSET; |
|
|
/** Thread context. |
* |
* Only registers preserved accross function calls are included. r9 is used |
* to store a TLS address. -ffixed-r9 gcc forces gcc not to use this |
* register. -mtp=soft forces gcc to use #__aeabi_read_tp to obtain |
* TLS address. |
*/ |
typedef struct { |
uint32_t sp; |
uint32_t pc; |