simplify errno implementation
the motivation for the errno_ptr field in the thread structure, which this commit removes, was to allow the main thread's errno to keep its address when lazy thread pointer initialization was used. &errno was evaluated prior to setting up the thread pointer and stored in errno_ptr for the main thread; subsequently created threads would have errno_ptr pointing to their own errno_val in the thread structure. since lazy initialization was removed, there is no need for this extra level of indirection; __errno_location can simply return the address of the thread's errno_val directly. this does cause &errno to change, but the change happens before entry to application code, and thus is not observable.
This commit is contained in:
@@ -18,7 +18,7 @@ struct pthread {
|
||||
uintptr_t sysinfo;
|
||||
uintptr_t canary;
|
||||
pid_t tid, pid;
|
||||
int tsd_used, errno_val, *errno_ptr;
|
||||
int tsd_used, errno_val;
|
||||
volatile int cancel, canceldisable, cancelasync;
|
||||
int detached;
|
||||
unsigned char *map_base;
|
||||
|
||||
Reference in New Issue
Block a user