summaryrefslogtreecommitdiffstats
path: root/runtime/loc2c-runtime.h
diff options
context:
space:
mode:
authoraskeshav <askeshav>2005-10-28 22:49:28 +0000
committeraskeshav <askeshav>2005-10-28 22:49:28 +0000
commit1c9db4fdf66fe88a731319b99942872fa567d742 (patch)
tree33a86507a7fcf9a9c771cf9a1801c8f81c566cf8 /runtime/loc2c-runtime.h
parent063b69fe3f1109ec81b5e4c1f1333a442ccb3734 (diff)
downloadsystemtap-steved-1c9db4fdf66fe88a731319b99942872fa567d742.tar.gz
systemtap-steved-1c9db4fdf66fe88a731319b99942872fa567d742.tar.xz
systemtap-steved-1c9db4fdf66fe88a731319b99942872fa567d742.zip
IA64 Runtime support patches. With this in place
Systemtap should now be able to build on Ia64. Includes supports for - function probes, return probes, function parameter access and dumping stack backtrace. Added by Anil S Keshavamurthy <Anil.s.keshavamurthy@intel.com>
Diffstat (limited to 'runtime/loc2c-runtime.h')
-rw-r--r--runtime/loc2c-runtime.h48
1 files changed, 47 insertions, 1 deletions
diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h
index ed174db3..f9bcf2ad 100644
--- a/runtime/loc2c-runtime.h
+++ b/runtime/loc2c-runtime.h
@@ -1,4 +1,12 @@
-/* target operations */
+/* target operations
+ * Copyright (C) 2005 Red Hat Inc.
+ * Copyright (C) 2005 Intel Corporation.
+ *
+ * This file is part of systemtap, and is free software. You can
+ * redistribute it and/or modify it under the terms of the GNU General
+ * Public License (GPL); either version 2, or (at your option) any
+ * later version.
+ */
#include <linux/types.h>
#define intptr_t long
@@ -50,6 +58,13 @@
#define dwarf_register_6(regs) regs->esi
#define dwarf_register_7(regs) regs->edi
+#elif defined __ia64__
+#undef fetch_register
+#undef store_register
+
+#define fetch_register(regno) ia64_fetch_register(regno, c->regs)
+#define store_register(regno, value) ia64_store_register(regno, c->regs, value)
+
#elif defined __x86_64__
#define dwarf_register_0(regs) regs->rax
@@ -113,6 +128,37 @@
goto deref_fault; \
})
+#elif defined __ia64__
+#define deref(size, addr) \
+ ({ \
+ int _bad = 0; \
+ intptr_t _v=0; \
+ switch (size){ \
+ case 1: __get_user_size(_v, addr, 1, _bad); break; \
+ case 2: __get_user_size(_v, addr, 2, _bad); break; \
+ case 4: __get_user_size(_v, addr, 4, _bad); break; \
+ case 8: __get_user_size(_v, addr, 8, _bad); break; \
+ default: __get_user_unknown(); break; \
+ } \
+ if (_bad) \
+ goto deref_fault; \
+ _v; \
+ })
+
+#define store_deref(size, addr, value) \
+ ({ \
+ int _bad=0; \
+ switch (size){ \
+ case 1: __put_user_size(value, addr, 1, _bad); break; \
+ case 2: __put_user_size(value, addr, 2, _bad); break; \
+ case 4: __put_user_size(value, addr, 4, _bad); break; \
+ case 8: __put_user_size(value, addr, 8, _bad); break; \
+ default: __put_user_unknown(); break; \
+ } \
+ if (_bad) \
+ goto deref_fault; \
+ })
+
#elif defined __powerpc64__
#define deref(size, addr) \