aboutsummaryrefslogtreecommitdiff
path: root/Debugger/debug_stub.h
diff options
context:
space:
mode:
authorTat-Chee Wan (USM)2012-09-05 14:12:13 +0800
committerTat-Chee Wan (USM)2012-09-05 14:12:13 +0800
commitaa0778c0d89f9f0722428e419866ff3aedf06bf2 (patch)
tree5aa23e5535fffa4868c4566626abd03c9d23b7b1 /Debugger/debug_stub.h
parentcf42b7bf19c5439adaeda8c36bab0893a9e83eed (diff)
updated arm function label declarations to use .type directive for interworking
Newer binutils (>2.21) does not handle interworking correctly if the .type directive is not used for ARM functions. The fix is to add a private copy of the arm_interwork macro to the debugger stub to avoid this issue when calling ARM routines from Thumb (used by NIF).
Diffstat (limited to 'Debugger/debug_stub.h')
-rw-r--r--Debugger/debug_stub.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/Debugger/debug_stub.h b/Debugger/debug_stub.h
index 6807ac1..2430e77 100644
--- a/Debugger/debug_stub.h
+++ b/Debugger/debug_stub.h
@@ -145,6 +145,20 @@ static inline void dbg_breakpoint_thumb(void) { asm volatile (".hword 0xBE7F" /*
.hword (BKPT16_INSTR | BKPT16_MANUAL_BKPT)
.endm
+/** Macro to declare Interworking ARM Routine
+ *
+ * dbg_interwork <arm_routine_name>
+ *
+ * Note: declared as a private macro since ARMDEBUG is also used by NIF
+ */
+ .macro dbg_interwork arm_routine
+ .align 4
+ .arm
+ .type \arm_routine, %function @ Needed by new binutils (>2.21)
+ .global \arm_routine
+\arm_routine:
+ .endm
+
#endif
/*@}*/