summaryrefslogtreecommitdiffstats
path: root/runtime/loc2c-runtime.h
diff options
context:
space:
mode:
authorhunt <hunt>2007-05-30 14:33:55 +0000
committerhunt <hunt>2007-05-30 14:33:55 +0000
commit79e80fedc4bcac4cd1d5a684537f20a4331efd4e (patch)
treeaccd5d9105d2438ae2f0171ee3d3813de1b25f11 /runtime/loc2c-runtime.h
parent2cbe17e95de653099901e34124ab1a376e150514 (diff)
downloadsystemtap-steved-79e80fedc4bcac4cd1d5a684537f20a4331efd4e.tar.gz
systemtap-steved-79e80fedc4bcac4cd1d5a684537f20a4331efd4e.tar.xz
systemtap-steved-79e80fedc4bcac4cd1d5a684537f20a4331efd4e.zip
2007-05-30 Martin Hunt <hunt@redhat.com>
Patch from Quentin Barnes. * arith.c: Add arm support for 64-bit division. * copy.c: Enable arm support. * loc2c-runtime.h: Ditto. * regs.[ch]: Ditto. * stack.c: Include stack-arm.c. * stack-arm.c: New file. * time.c (_stp_gettimeofday_ns): hack for arm. See PR 4569.
Diffstat (limited to 'runtime/loc2c-runtime.h')
-rw-r--r--runtime/loc2c-runtime.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h
index 9c84f6df..df180949 100644
--- a/runtime/loc2c-runtime.h
+++ b/runtime/loc2c-runtime.h
@@ -112,6 +112,13 @@
#define fetch_register(regno) ((intptr_t) c->regs->gpr[regno])
#define store_register(regno) (c->regs->gpr[regno] = (value))
+#elif defined (__arm__)
+
+#undef fetch_register
+#undef store_register
+#define fetch_register(regno) ((long) c->regs->uregs[regno])
+#define store_register(regno) (c->regs->uregs[regno] = (value))
+
#elif defined (__s390__) || defined (__s390x__)
#undef fetch_register
#undef store_register
@@ -294,6 +301,37 @@
goto deref_fault; \
})
+#elif defined (__arm__)
+
+#define deref(size, addr) \
+ ({ \
+ int _bad = 0; \
+ intptr_t _v=0; \
+ switch (size){ \
+ case 1: __get_user_asm_byte(_v, addr, _bad); break; \
+ case 2: __get_user_asm_half(_v, addr, _bad); break; \
+ case 4: __get_user_asm_word(_v, addr, _bad); break; \
+ default: __get_user_bad(); break; \
+ } \
+ if (_bad) \
+ goto deref_fault; \
+ _v; \
+ })
+
+#define store_deref(size, addr, value) \
+ ({ \
+ int _bad=0; \
+ switch (size){ \
+ case 1: __put_user_asm_byte(value, addr, _bad); break; \
+ case 2: __put_user_asm_half(value, addr, _bad); break; \
+ case 4: __put_user_asm_word(value, addr, _bad); break; \
+ case 8: __put_user_asm_dword(value, addr, _bad); break; \
+ default: __put_user_bad(); break; \
+ } \
+ if (_bad) \
+ goto deref_fault; \
+ })
+
#elif defined (__s390__) || defined (__s390x__)
#ifndef EX_TABLE