Changeset fa23560 in mainline for uspace/lib/libc/arch/mips32/include/thread.h
- Timestamp:
- 2007-10-30T22:54:11Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4d21cf8
- Parents:
- b2a0f6dd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/arch/mips32/include/thread.h
rb2a0f6dd rfa23560 34 34 */ 35 35 36 /* TLS for MIPS is described in http://www.linux-mips.org/wiki/NPTL */37 38 36 #ifndef LIBC_mips32_THREAD_H_ 39 37 #define LIBC_mips32_THREAD_H_ 40 41 /* I did not find any specification (neither MIPS nor PowerPC), but42 * as I found it43 * - it uses Variant II44 * - TCB is at Address(First TLS Block)+0x7000.45 * - DTV is at Address(First TLS Block)+0x800046 * - What would happen if the TLS data was larger then 0x7000?47 * - The linker never accesses DTV directly, has the second definition any48 * 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 address52 */53 #define MIPS_TP_OFFSET 0x700054 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 }75 38 76 39 #endif
Note:
See TracChangeset
for help on using the changeset viewer.