int main() { struct user_desc ud; ud.entry_number = -1; __set_thread_area(&ud); //staptest// [[[[set_thread_area ({entry_number=XXXX, base_addr=XXXX, limit=XXXX, seg_32bit=XXXX, contents=XXXX, read_exec_only=XXXX, limit_in_pages=XXXX, seg_not_present=XXXX, useable=XXXX[[[[, lm=XXXX!!!!]]]]})!!!!ni_syscall ()]]]] = NNNN __get_thread_area(&ud); //staptest// [[[[get_thread_area ({entry_number=XXXX, base_addr=XXXX, limit=XXXX, seg_32bit=XXXX, contents=XXXX, read_exec_only=XXXX, limit_in_pages=XXXX, seg_not_present=XXXX, useable=XXXX[[[[, lm=XXXX!!!!]]]]})!!!!ni_syscall ()]]]] = NNNN // Limit testing __set_thread_area((struct user_desc *)-1); //staptest// [[[[set_thread_area (0x[f]+)!!!!ni_syscall ()]]]] = NNNN __get_thread_area((struct user_desc *)-1); //staptest// [[[[get_thread_area (0x[f]+)!!!!ni_syscall ()]]]] = NNNN return 0; }
int __init_tp(void* p) { pthread_t td = p; td->self = td; int r = __set_thread_area(TP_ADJ(p)); if (r < 0) return -1; if (!r) libc.can_do_threads = 1; td->tid = __syscall(SYS_set_tid_address, &td->tid); td->locale = &libc.global_locale; td->robust_list.head = &td->robust_list.head; return 0; }
static int init_main_thread() { __syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, SIGPT_SET, 0, _NSIG/8); if (__set_thread_area(TP_ADJ(main_thread)) < 0) return -1; main_thread->canceldisable = libc.canceldisable; main_thread->tsd = (void **)__pthread_tsd_main; main_thread->errno_ptr = __errno_location(); main_thread->self = main_thread; main_thread->tid = main_thread->pid = __syscall(SYS_set_tid_address, &main_thread->tid); if (!main_thread->dtv) main_thread->dtv = (void *)dummy; libc.main_thread = main_thread; return 0; }
static void *simple(void *p) { *(void **)p = p; return __set_thread_area(TP_ADJ(p)) ? 0 : p; }