mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
begin unifying clone/thread management interface in preparation for porting
This commit is contained in:
parent
59666802fb
commit
0b2006c8fe
3 changed files with 22 additions and 34 deletions
|
@ -20,9 +20,10 @@
|
|||
#define pthread __pthread
|
||||
|
||||
struct pthread {
|
||||
struct pthread *self, *join;
|
||||
int errno_val;
|
||||
struct pthread *self;
|
||||
unsigned long tlsdesc[4];
|
||||
pid_t tid, pid;
|
||||
int tsd_used, errno_val, *errno_ptr;
|
||||
volatile int canceldisable, cancelasync, cancelpoint, cancel;
|
||||
unsigned char *map_base;
|
||||
size_t map_size;
|
||||
|
@ -32,12 +33,9 @@ struct pthread {
|
|||
jmp_buf exit_jmp_buf;
|
||||
int detached;
|
||||
int exitlock;
|
||||
unsigned long tlsdesc[4];
|
||||
struct __ptcb *cancelbuf;
|
||||
void **tsd;
|
||||
int tsd_used;
|
||||
pthread_attr_t attr;
|
||||
int *errno_ptr;
|
||||
};
|
||||
|
||||
static inline struct pthread *__pthread_self()
|
||||
|
|
|
@ -1,35 +1,27 @@
|
|||
.text
|
||||
.global __clone
|
||||
.type __clone,%function
|
||||
__clone:
|
||||
movl 8(%esp),%ecx
|
||||
andl $0xfffffff0, %ecx
|
||||
subl $28,%ecx
|
||||
movl 16(%esp),%eax
|
||||
movl %eax,12(%ecx)
|
||||
movl 4(%esp),%eax
|
||||
movl %eax,8(%ecx)
|
||||
.global __uniclone
|
||||
.type __uniclone,%function
|
||||
__uniclone:
|
||||
movl 4(%esp),%ecx
|
||||
subl $24,%ecx
|
||||
movl 8(%esp),%eax
|
||||
movl %eax,16(%ecx)
|
||||
movl 12(%esp),%eax
|
||||
movl %eax,24(%ecx)
|
||||
pushl %ebx
|
||||
pushl %esi
|
||||
pushl %edi
|
||||
pushl %ebp
|
||||
movl %eax,8(%eax)
|
||||
leal 20(%eax),%edx
|
||||
leal 4(%eax),%esi
|
||||
movl %edx,%edi
|
||||
movl $0x7d0f00,%ebx
|
||||
movl $120,%eax
|
||||
movl 12+12(%esp),%ebx
|
||||
movl 20+12(%esp),%edx
|
||||
movl 24+12(%esp),%esi
|
||||
movl 28+12(%esp),%edi
|
||||
int $128
|
||||
popl %ebp
|
||||
popl %edi
|
||||
popl %esi
|
||||
popl %ebx
|
||||
test %eax,%eax
|
||||
jnz 1f
|
||||
xorl %ebp,%ebp
|
||||
call *%ebx
|
||||
movl %eax, %ebx
|
||||
movl $1, %eax
|
||||
int $128
|
||||
1:
|
||||
movl %eax, 4(%esp)
|
||||
ret
|
||||
|
||||
.size __clone,.-__clone
|
||||
.size __uniclone,.-__uniclone
|
||||
|
|
|
@ -152,8 +152,7 @@ static int start(void *p)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define CLONE_MAGIC 0x7d0f00
|
||||
int __clone(int (*)(void *), void *, int, void *, pid_t *, void *, pid_t *);
|
||||
int __uniclone(void *, int (*)(), void *);
|
||||
|
||||
#define ROUND(x) (((x)+PAGE_SIZE-1)&-PAGE_SIZE)
|
||||
|
||||
|
@ -203,8 +202,7 @@ int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(vo
|
|||
while (rs.lock) __wait(&rs.lock, 0, 1, 1);
|
||||
|
||||
a_inc(&libc.threads_minus_1);
|
||||
ret = __clone(start, stack, CLONE_MAGIC, new,
|
||||
&new->tid, &new->tlsdesc, &new->tid);
|
||||
ret = __uniclone(stack, start, new);
|
||||
|
||||
a_dec(&rs.blocks);
|
||||
if (rs.lock) __wake(&rs.blocks, 1, 1);
|
||||
|
|
Loading…
Add table
Reference in a new issue