aboutsummaryrefslogtreecommitdiffstats
path: root/poc.c
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-03-08 00:20:02 +0100
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-03-08 00:30:29 +0100
commit3c7eba1e65f0b1ba0078f87dd122579e1a79bfad (patch)
treeac8a163aba3368e1d2481480736997eccf588876 /poc.c
parent24a2219fccbbb2fc58ec10df3b3f864508164b2d (diff)
downloadtowelroot-3c7eba1e65f0b1ba0078f87dd122579e1a79bfad.tar.gz
towelroot-3c7eba1e65f0b1ba0078f87dd122579e1a79bfad.tar.bz2
towelroot-3c7eba1e65f0b1ba0078f87dd122579e1a79bfad.zip
poc.c: Force inlining
In recent gcc version, inline hints the compiler to inline the function but doesn't force the inline. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
Diffstat (limited to 'poc.c')
-rw-r--r--poc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/poc.c b/poc.c
index be0ff9a..77a3bfe 100644
--- a/poc.c
+++ b/poc.c
@@ -14,17 +14,17 @@
#define FUTEX_WAIT_REQUEUE_PI 11
#define FUTEX_CMP_REQUEUE_PI 12
-inline void userlock_wait(volatile const int *userlock) {
+__always_inline void userlock_wait(volatile const int *userlock) {
while (USERLOCK_OCCUPIED == *userlock) {
usleep(10);
}
}
-inline void userlock_lock(volatile int *userlock) {
+__always_inline void userlock_lock(volatile int *userlock) {
*userlock = USERLOCK_OCCUPIED;
}
-inline void userlock_release(volatile int *userlock) {
+__always_inline void userlock_release(volatile int *userlock) {
*userlock = USERLOCK_FREE;
}
@@ -52,15 +52,15 @@ void wait_for_thread_to_wait_in_kernel(pthread_t tid, int context_switch_count)
}
}
-inline int futex_lock_pi(int *uaddr) {
+__always_inline int futex_lock_pi(int *uaddr) {
return syscall(__NR_futex, uaddr, FUTEX_LOCK_PI, 0, NULL, NULL, 0);
}
-inline int futex_wait_requeue_pi(int *uaddr1, int *uaddr2) {
+__always_inline int futex_wait_requeue_pi(int *uaddr1, int *uaddr2) {
return syscall(__NR_futex, uaddr1, FUTEX_WAIT_REQUEUE_PI, 0, NULL, uaddr2, 0);
}
-inline int futex_requeue_pi(int *uaddr1, int *uaddr2, int cmpval) {
+__always_inline int futex_requeue_pi(int *uaddr1, int *uaddr2, int cmpval) {
return syscall(__NR_futex, uaddr1, FUTEX_CMP_REQUEUE_PI, 1, NULL, uaddr2, cmpval);
}