wfe_ldrex_strex.cpp

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2020-01-07 00:00:00 +00:00
parent d5876c9980
commit 268355e53b
2 changed files with 49 additions and 2 deletions

View File

@@ -0,0 +1,35 @@
// https://cirosantilli.com/linux-kernel-module-cheat#arm-wfe-global-monitor-events
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <atomic>
#include <iostream>
#include <mutex>
#include <thread>
#include <lkmc/futex.h>
std::atomic_ulong done;
int futex = 1;
void myfunc() {
__asm__ __volatile__ ("ldxr x0, [%0];wfe;wfe" : : "r" (&futex) : "x0");
done.store(futex);
}
int main(int argc, char **argv) {
bool do_sev = true;
if (argc > 1) {
do_sev = (argv[1][0] != '0');
}
done.store(0);
std::thread thread;
thread = std::thread(myfunc);
while (!done.load()) {
if (do_sev) {
__asm__ __volatile__ ("mov x0, 1;stxr w1, x0, [%0]" : : "r" (&futex) : "x0", "x1");
}
}
thread.join();
}