summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--benchmarks/pthread_benchmark.cpp5
-rw-r--r--benchmarks/unistd_benchmark.cpp5
-rw-r--r--libc/include/errno.h2
-rw-r--r--libc/include/pthread.h2
-rw-r--r--libc/include/stdlib.h6
-rw-r--r--libc/include/unistd.h2
6 files changed, 14 insertions, 8 deletions
diff --git a/benchmarks/pthread_benchmark.cpp b/benchmarks/pthread_benchmark.cpp
index 621fcb6..c010dd2 100644
--- a/benchmarks/pthread_benchmark.cpp
+++ b/benchmarks/pthread_benchmark.cpp
@@ -18,11 +18,14 @@
#include <pthread.h>
+// Stop GCC optimizing out our pure function.
+/* Must not be static! */ pthread_t (*pthread_self_fp)() = pthread_self;
+
static void BM_pthread_self(int iters) {
StartBenchmarkTiming();
for (int i = 0; i < iters; ++i) {
- pthread_self();
+ pthread_self_fp();
}
StopBenchmarkTiming();
diff --git a/benchmarks/unistd_benchmark.cpp b/benchmarks/unistd_benchmark.cpp
index f2c9d73..c35e7c3 100644
--- a/benchmarks/unistd_benchmark.cpp
+++ b/benchmarks/unistd_benchmark.cpp
@@ -30,11 +30,14 @@ static void BM_unistd_getpid(int iters) {
}
BENCHMARK(BM_unistd_getpid);
+// Stop GCC optimizing out our pure function.
+/* Must not be static! */ pid_t (*gettid_fp)() = gettid;
+
static void BM_unistd_gettid(int iters) {
StartBenchmarkTiming();
for (int i = 0; i < iters; ++i) {
- gettid();
+ gettid_fp();
}
StopBenchmarkTiming();
diff --git a/libc/include/errno.h b/libc/include/errno.h
index 2e5ce5f..1a36b7a 100644
--- a/libc/include/errno.h
+++ b/libc/include/errno.h
@@ -41,7 +41,7 @@ __BEGIN_DECLS
#endif
/* internal function returning the address of the thread-specific errno */
-extern volatile int* __errno(void);
+extern volatile int* __errno(void) __pure2;
/* a macro expanding to the errno l-value */
#define errno (*__errno())
diff --git a/libc/include/pthread.h b/libc/include/pthread.h
index 5c9b626..29caafc 100644
--- a/libc/include/pthread.h
+++ b/libc/include/pthread.h
@@ -226,7 +226,7 @@ int pthread_rwlock_trywrlock(pthread_rwlock_t*) __nonnull((1));
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock) __nonnull((1));
int pthread_rwlock_wrlock(pthread_rwlock_t*) __nonnull((1));
-pthread_t pthread_self(void);
+pthread_t pthread_self(void) __pure2;
int pthread_setname_np(pthread_t, const char*) __nonnull((2));
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index 483aaf0..0f862c3 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -138,21 +138,21 @@ typedef struct {
int rem;
} div_t;
-extern div_t div(int, int);
+extern div_t div(int, int) __pure2;
typedef struct {
long int quot;
long int rem;
} ldiv_t;
-extern ldiv_t ldiv(long, long);
+extern ldiv_t ldiv(long, long) __pure2;
typedef struct {
long long int quot;
long long int rem;
} lldiv_t;
-extern lldiv_t lldiv(long long, long long);
+extern lldiv_t lldiv(long long, long long) __pure2;
/* BSD compatibility. */
extern const char* getprogname(void);
diff --git a/libc/include/unistd.h b/libc/include/unistd.h
index b4982cb..ee6d7b1 100644
--- a/libc/include/unistd.h
+++ b/libc/include/unistd.h
@@ -54,7 +54,7 @@ extern __noreturn void _exit(int);
extern pid_t fork(void);
extern pid_t vfork(void);
extern pid_t getpid(void);
-extern pid_t gettid(void);
+extern pid_t gettid(void) __pure2;
extern pid_t getpgid(pid_t);
extern int setpgid(pid_t, pid_t);
extern pid_t getppid(void);