Ignore:
Timestamp:
2007-10-30T22:54:11Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4d21cf8
Parents:
b2a0f6dd
Message:

Unify implementations of TLS variant I and variant II alloc_tls() and
free_tls_arch().

File:
1 edited

Legend:

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

    rb2a0f6dd rfa23560  
    3434 */
    3535
    36 /* TLS for MIPS is described in http://www.linux-mips.org/wiki/NPTL */
    37 
    3836#ifndef LIBC_mips32_THREAD_H_
    3937#define LIBC_mips32_THREAD_H_
    40 
    41 /* I did not find any specification (neither MIPS nor PowerPC), but
    42  * as I found it
    43  * - it uses Variant II
    44  * - TCB is at Address(First TLS Block)+0x7000.
    45  * - DTV is at Address(First TLS Block)+0x8000
    46  * - What would happen if the TLS data was larger then 0x7000?
    47  * - The linker never accesses DTV directly, has the second definition any
    48  *   sense?
    49  * We will make it this way:
    50  * - TCB is at TP-0x7000-sizeof(tcb)
    51  * - No assumption about DTV etc., but it will not have a fixed address
    52  */
    53 #define MIPS_TP_OFFSET 0x7000
    54 
    55 typedef struct {
    56         void *fibril_data;
    57 } tcb_t;
    58 
    59 static inline void __tcb_set(tcb_t *tcb)
    60 {
    61         void *tp = tcb;
    62         tp += MIPS_TP_OFFSET + sizeof(tcb_t);
    63 
    64         asm volatile ("add $27, %0, $0" : : "r"(tp)); /* Move tls to K1 */
    65 }
    66 
    67 static inline tcb_t * __tcb_get(void)
    68 {
    69         void * retval;
    70 
    71         asm volatile("add %0, $27, $0" : "=r"(retval));
    72 
    73         return (tcb_t *)(retval - MIPS_TP_OFFSET - sizeof(tcb_t));
    74 }
    7538
    7639#endif
Note: See TracChangeset for help on using the changeset viewer.