Message ID | 1409041665-1558-1-git-send-email-mjw@redhat.com |
---|---|
State | New |
Headers | show |
On 08/26/2014 10:27 AM, Mark Wielaard wrote: > * sysdeps/i386/nptl/tls.h (TLS_INIT_TP): Use INTERNAL_SYSCALL > to call set_thread_area instead of hand written asm. Patch looks good, but you can remove these #defines now: # ifdef __PIC__ # define TLS_EBX_ARG "r" # define TLS_LOAD_EBX "xchgl %3, %%ebx\n\t" # else # define TLS_EBX_ARG "b" # define TLS_LOAD_EBX # endif (INTERNAL_SYSCALL is not affected by this issue because it uses explicit register constraints, and not the general "r" constraint.)
diff --git a/sysdeps/i386/nptl/tls.h b/sysdeps/i386/nptl/tls.h index ac9c9a2..052ea64 100644 --- a/sysdeps/i386/nptl/tls.h +++ b/sysdeps/i386/nptl/tls.h @@ -231,12 +231,8 @@ tls_fill_user_desc (union user_desc_init *desc, tls_fill_user_desc (&_segdescr, -1, _thrdescr); \ \ /* Install the TLS. */ \ - asm volatile (TLS_LOAD_EBX \ - "int $0x80\n\t" \ - TLS_LOAD_EBX \ - : "=a" (_result), "=m" (_segdescr.desc.entry_number) \ - : "0" (__NR_set_thread_area), \ - TLS_EBX_ARG (&_segdescr.desc), "m" (_segdescr.desc)); \ + INTERNAL_SYSCALL_DECL (err); \ + _result = INTERNAL_SYSCALL (set_thread_area, err, 1, &_segdescr.desc); \ \ if (_result == 0) \ /* We know the index in the GDT, now load the segment register. \