/uspace/trunk/libc/arch/ia64/include/thread.h |
---|
29,18 → 29,12 |
#ifndef __LIBC__ia64THREAD_H__ |
#define __LIBC__ia64THREAD_H__ |
/* This structure must be exactly 16 bytes long */ |
typedef struct { |
void *dtv; /* unused in static linking*/ |
void *pst_data; |
} tcb_t; |
static inline void __tcb_set(tcb_t *tcb) |
static inline void __tls_set(void *tls) |
{ |
__asm__ volatile ("mov r13 = %0\n" : : "r" (tcb) : "r13"); |
__asm__ volatile ("mov r13 = %0\n" : : "r" (tls) : "r13"); |
} |
static inline tcb_t *__tcb_get(void) |
static inline void *__tls_get(void) |
{ |
void *retval; |
/uspace/trunk/libc/arch/ia64/Makefile.inc |
---|
36,5 → 36,4 |
AFLAGS += |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \ |
arch/$(ARCH)/src/psthread.S \ |
arch/$(ARCH)/src/thread.c |
arch/$(ARCH)/src/psthread.S |
/uspace/trunk/libc/arch/ia64/src/thread.c |
---|
File deleted |
/uspace/trunk/libc/arch/ia64/_link.ld.in |
---|
26,16 → 26,6 |
*(.data); |
*(.sdata); |
} :data |
.tdata : { |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
.bss : { |
*(.sbss); |
*(.scommon); |
/uspace/trunk/libc/arch/amd64/Makefile.inc |
---|
33,7 → 33,6 |
TOOLCHAIN_DIR = /usr/local/amd64/bin |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \ |
arch/$(ARCH)/src/psthread.S \ |
arch/$(ARCH)/src/thread.c |
arch/$(ARCH)/src/psthread.S |
LFLAGS += -N |
/uspace/trunk/libc/arch/amd64/include/thread.h |
---|
31,17 → 31,12 |
#include <libc.h> |
typedef struct { |
void *self; |
void *pst_data; |
} tcb_t; |
static inline void __tcb_set(tcb_t *tcb) |
static inline void __tls_set(void *tls) |
{ |
__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb); |
__SYSCALL1(SYS_TLS_SET, (sysarg_t) tls); |
} |
static inline tcb_t * __tcb_get(void) |
static inline void * __tls_get(void) |
{ |
void * retval; |
/uspace/trunk/libc/arch/amd64/src/thread.c |
---|
File deleted |
/uspace/trunk/libc/arch/amd64/_link.ld.in |
---|
20,17 → 20,6 |
.data ALIGN(0x1000) : SUBALIGN(0x1000) { |
*(.data); |
} :data |
.tdata : { |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
.bss : { |
*(COMMON); |
*(.bss); |
/uspace/trunk/libc/arch/ia32/Makefile.inc |
---|
33,7 → 33,6 |
TOOLCHAIN_DIR = /usr/local/i686/bin |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/psthread.S \ |
arch/$(ARCH)/src/thread.c |
arch/$(ARCH)/src/psthread.S |
LFLAGS += -N |
/uspace/trunk/libc/arch/ia32/include/thread.h |
---|
31,17 → 31,12 |
#include <libc.h> |
typedef struct { |
void *self; |
void *pst_data; |
} tcb_t; |
static inline void __tcb_set(tcb_t *tcb) |
static inline void __tls_set(void *tls) |
{ |
__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb); |
__SYSCALL1(SYS_TLS_SET, (sysarg_t) tls); |
} |
static inline tcb_t * __tcb_get(void) |
static inline void * __tls_get(void) |
{ |
void * retval; |
/uspace/trunk/libc/arch/ia32/src/thread.c |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
/uspace/trunk/libc/arch/ia32/_link.ld.in |
---|
20,16 → 20,6 |
.data ALIGN(0x1000) : SUBALIGN(0x1000) { |
*(.data); |
} :data |
.tdata : { |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
.bss : { |
*(COMMON); |
*(.bss); |
/uspace/trunk/libc/arch/mips32/_link.ld.in |
---|
21,23 → 21,10 |
*(.data); |
*(.data.rel*); |
} :data |
.got : { |
_gp = .; |
*(.got); |
} :data |
.tdata : { |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
.sbss : { |
*(.scommon); |
*(.sbss); |
/uspace/trunk/libc/arch/mips32/include/psthread.h |
---|
31,17 → 31,6 |
#include <types.h> |
/* We define our own context_set, because we need to set |
* the TLS pointer to the tcb+0x7000 |
* |
* See tls_set in thread.h |
*/ |
#define context_set(c, _pc, stack, size, ptls) \ |
(c)->pc = (sysarg_t) (_pc); \ |
(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
(c)->tls = ((sysarg_t)(ptls)) + 0x7000 + sizeof(tcb_t); |
/* +16 is just for sure that the called function |
* have space to store it's arguments |
*/ |
/uspace/trunk/libc/arch/mips32/include/thread.h |
---|
31,39 → 31,17 |
#ifndef __LIBC__mips32THREAD_H__ |
#define __LIBC__mips32THREAD_H__ |
/* I did not find any specification (neither MIPS nor PowerPC), but |
* as I found it |
* - it uses Variant II |
* - TCB is at Address(First TLS Block)+0x7000. |
* - DTV is at Address(First TLS Block)+0x8000 |
* - What would happen if the TLS data was larger then 0x7000? |
* - The linker never accesses DTV directly, has the second definition any |
* sense? |
* We will make it this way: |
* - TCB is at TP-0x7000-sizeof(tcb) |
* - No assumption about DTV etc., but it will not have a fixed address |
*/ |
#define MIPS_TP_OFFSET 0x7000 |
typedef struct { |
void *pst_data; |
} tcb_t; |
static inline void __tcb_set(tcb_t *tcb) |
static inline void __tls_set(void *tls) |
{ |
void *tp = tcb; |
tp += MIPS_TP_OFFSET + sizeof(tcb_t); |
__asm__ volatile ("add $27, %0, $0" : : "r"(tp)); /* Move tls to K1 */ |
__asm__ volatile ("add $27, %0, $0" : : "r"(tls)); /* Move tls to K1 */ |
} |
static inline tcb_t * __tcb_get(void) |
static inline void * __tls_get(void) |
{ |
void * retval; |
__asm__ volatile("add %0, $27, $0" : "=r"(retval)); |
return (tcb_t *)(retval - MIPS_TP_OFFSET - sizeof(tcb_t)); |
return retval; |
} |
#endif |
/uspace/trunk/libc/arch/mips32/Makefile.inc |
---|
34,7 → 34,6 |
CFLAGS += -mips3 |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/psthread.S \ |
arch/$(ARCH)/src/thread.c |
arch/$(ARCH)/src/psthread.S |
/uspace/trunk/libc/arch/mips32/src/thread.c |
---|
File deleted |