aboutsummaryrefslogtreecommitdiff
path: root/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc')
-rw-r--r--src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
index f744d72c..388a6580 100644
--- a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
+++ b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
@@ -37,13 +37,22 @@
#include <sys/syscall.h>
#include <unistd.h>
-#pragma GCC optimize ("O0")
-void *thread_function(void *data) __attribute__((noinline, optimize("O2")));
+#if defined(__ARM_EABI__)
+#define TID_PTR_REGISTER "r3"
+#elif defined(__i386)
+#define TID_PTR_REGISTER "ecx"
+#elif defined(__x86_64)
+#define TID_PTR_REGISTER "rcx"
+#else
+#error This test has not been ported to this platform.
+#endif
void *thread_function(void *data) {
pid_t thread_id = syscall(SYS_gettid);
- while (true) ;
- asm("");
+ register pid_t *thread_id_ptr asm(TID_PTR_REGISTER) = &thread_id;
+ while (true)
+ asm("" : : "r" (thread_id_ptr));
+ return NULL;
}
int main(int argc, char *argv[]) {