/* desc.c - function descriptors vs code addresses; where errno really is. C89. */ #include #include #include #include static void *tfn(void *a) { printf("errno in thread %p\n", (void *)&errno); return 0; } int main(void) { unsigned long *d; pthread_t t; setvbuf(stdout, 0, _IONBF, 0); d = (unsigned long *)main; printf("main desc %p -> code %08lx toc %08lx\n", (void *)d, d[0], d[1]); d = (unsigned long *)printf; printf("printf desc %p -> code %08lx toc %08lx\n", (void *)d, d[0], d[1]); d = (unsigned long *)getpid; printf("getpid desc %p -> code %08lx toc %08lx\n", (void *)d, d[0], d[1]); printf("errno in main %p\n", (void *)&errno); pthread_create(&t, 0, tfn, 0); pthread_join(t, 0); return 0; }