reorganize the __libc structure for threaded performance issues
authorRich Felker <dalias@aerifal.cx>
Sat, 2 Apr 2011 02:35:20 +0000 (22:35 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 2 Apr 2011 02:35:20 +0000 (22:35 -0400)
we want to keep atomically updated fields (locks and thread count) and
really anything writable far away from frequently-needed function
pointers. stuff some rarely-needed function pointers in between to
pad, hopefully up to a cache line boundary.

src/internal/libc.h

index c83fcaf..60a25ef 100644 (file)
@@ -5,20 +5,20 @@
 #include <stdio.h>
 
 struct __libc {
-       void (*lock)(volatile int *);
+       int *(*errno_location)(void);
        void (*cancelpt)(int);
+       void (*lock)(volatile int *);
+       void (*lockfile)(FILE *);
+       void (**tsd_keys)(void *);
+       void (*sigtimer)();
        int (*atexit)(void (*)(void));
        void (*fini)(void);
        void (*ldso_fini)(void);
-       int *(*errno_location)(void);
        volatile int threads_minus_1;
+       int ofl_lock;
        int (*rsyscall)(int, long, long, long, long, long, long);
-       void (**tsd_keys)(void *);
        void (*fork_handler)(int);
        FILE *ofl_head;
-       int ofl_lock;
-       void (*lockfile)(FILE *);
-       void (*sigtimer)();
 };