Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}
Пример #4
0
static void *simple(void *p)
{
	*(void **)p = p;
	return __set_thread_area(TP_ADJ(p)) ? 0 : p;
}