Ignore:
Timestamp:
2007-06-08T15:02:49Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c03ee1c
Parents:
3ee8a075
Message:

Merge arm32 into trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/libc/arch/arm32/include/thread.h

    r3ee8a075 r6b781c0  
    11/*
    2  * Copyright (c) 2006 Jakub Jermar
     2 * Copyright (c) 2007 Pavel Jancik, Michal Kebrt
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libcia64       
     29/** @addtogroup libcarm32
    3030 * @{
    3131 */
    3232/** @file
     33 *  @brief Uspace threads and TLS.
    3334 */
    3435
     
    3839#include <unistd.h>
    3940
     41/** Stack initial size. */
    4042#define THREAD_INITIAL_STACK_PAGES_NO 1
    4143
     44/** Offsets for accessing __thread variables are shifted 8 bytes higher. */
     45#define ARM_TP_OFFSET   (-8)
     46
     47/** TCB (Thread Control Block) struct.
     48 *
     49 *  TLS starts just after this struct.
     50 */
    4251typedef struct {
     52        /** psthread data. */
    4353        void *pst_data;
    44         /* TODO */
    4554} tcb_t;
    4655
     56
     57/** Sets TLS address to the r9 register.
     58 *
     59 *  @param tcb TCB (TLS starts behind)
     60 */
    4761static inline void __tcb_set(tcb_t *tcb)
    4862{
    49         /* TODO */
     63        void *tls = (void *)tcb;
     64        tls += sizeof(tcb_t) + ARM_TP_OFFSET;
     65        asm volatile (
     66                "mov r9, %0"
     67                :
     68                : "r"(tls)
     69        );
    5070}
    5171
     72
     73/** Returns TCB address.
     74 *
     75 * @return TCB address (starts before TLS which address is stored in r9 register).
     76 */
    5277static inline tcb_t *__tcb_get(void)
    5378{
    54         /* TODO */
    55         return NULL;
     79        void *ret;
     80        asm volatile (
     81                "mov %0, r9"
     82                : "=r"(ret)
     83        );
     84        return (tcb_t *)(ret - ARM_TP_OFFSET - sizeof(tcb_t));
    5685}
     86
     87
     88/** Returns TLS address stored.
     89 *
     90 *  Implemented in assembly.
     91 *
     92 *  @return TLS address stored in r9 register
     93 */
     94extern uintptr_t __aeabi_read_tp(void);
    5795
    5896#endif
Note: See TracChangeset for help on using the changeset viewer.