diff options
author | hunt <hunt> | 2007-05-30 14:33:55 +0000 |
---|---|---|
committer | hunt <hunt> | 2007-05-30 14:33:55 +0000 |
commit | 79e80fedc4bcac4cd1d5a684537f20a4331efd4e (patch) | |
tree | accd5d9105d2438ae2f0171ee3d3813de1b25f11 /runtime/loc2c-runtime.h | |
parent | 2cbe17e95de653099901e34124ab1a376e150514 (diff) | |
download | systemtap-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.h | 38 |
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 |