diff options
| author | Rich Felker <dalias@aerifal.cx> | 2015-04-13 17:26:08 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2015-04-13 17:26:08 -0400 | 
| commit | f630df09b1fd954eda16e2f779da0b5ecc9d80d3 (patch) | |
| tree | ffd7214107c40ed9ab6d321a72184efc4b4b8533 /src | |
| parent | f3ddd173806fd5c60b3f034528ca24542aecc5b9 (diff) | |
| download | musl-f630df09b1fd954eda16e2f779da0b5ecc9d80d3.tar.gz | |
allow i386 __set_thread_area to be called more than once
previously a new GDT slot was requested, even if one had already been
obtained by a previous call. instead extract the old slot number from
GS and reuse it if it was already set. the formula (GS-3)/8 for the
slot number automatically yields -1 (request for new slot) if GS is
zero (unset).
Diffstat (limited to 'src')
| -rw-r--r-- | src/thread/i386/__set_thread_area.s | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/src/thread/i386/__set_thread_area.s b/src/thread/i386/__set_thread_area.s index ad538151..1d852689 100644 --- a/src/thread/i386/__set_thread_area.s +++ b/src/thread/i386/__set_thread_area.s @@ -6,7 +6,11 @@ __set_thread_area:  	push $0x51  	push $0xfffff  	push 16(%esp) -	push $-1 +	xor %edx,%edx +	mov %gs,%dx +	sub $3,%edx +	sar $3,%edx +	push %edx  	mov %esp,%ebx  	xor %eax,%eax  	mov $243,%al | 
