summaryrefslogtreecommitdiff
path: root/include/libunwind-hppa.h
diff options
context:
space:
mode:
authorhp.com!davidm <hp.com!davidm>2005-05-03 09:13:17 +0000
committerhp.com!davidm <hp.com!davidm>2005-05-03 09:13:17 +0000
commitc224ec66c5f914d142ee946f18e1b2805cc3d9b7 (patch)
tree5aa185d05ed637069a64a8e8c88a0f573e2509f3 /include/libunwind-hppa.h
parent75fb20d67d870ba9439bcdc5dc25d3c321c1c659 (diff)
downloadlibunwind-c224ec66c5f914d142ee946f18e1b2805cc3d9b7.tar.gz
(UNW_HPPA_EH3): Fix comment-typo.
2004/12/02 18:37:47-08:00 hp.com!davidm (unw_tdep_fpreg_t): Make it a union of "double" and two 32-bit words. (unw_tdep_getcontext): Fix typo. 2004/12/02 00:40:45-08:00 mostang.com!davidm (_U_TDEP_QP_TRUE): New macro. (UNW_TDEP_CURSOR_LEN): Increase from 127 to 511 to accommodate DWARF cursor-size. (unw_word_t): Change from uint64_t to uint32_t since user-land PA-Linux is only 32 bits. (hppa_regnum_t): Add register names UNW_HPPA_EH0, UNW_HPPA_EH1, UNW_HPPA_EH2, UNW_HPPA_EH3, UNW_HPPA_CFA, and UNW_HPPA_EH. (UNW_TDEP_NUM_EH_REGS): New macro. (unw_tdep_getcontext): Point it at UNW_ARCH_OBJ(getcontext). (Logical change 1.290)
Diffstat (limited to 'include/libunwind-hppa.h')
-rw-r--r--include/libunwind-hppa.h57
1 files changed, 40 insertions, 17 deletions
diff --git a/include/libunwind-hppa.h b/include/libunwind-hppa.h
index 75fb14c1..0c78e1bb 100644
--- a/include/libunwind-hppa.h
+++ b/include/libunwind-hppa.h
@@ -1,6 +1,5 @@
/* libunwind - a platform-independent unwind library
- Copyright (C) 2003 Hewlett-Packard Co
- Contributed by Scott Marovitch
+ Copyright (C) 2003-2004 Hewlett-Packard Co
This file is part of libunwind.
@@ -36,28 +35,33 @@ extern "C" {
#define UNW_TARGET hppa
#define UNW_TARGET_HPPA 1
+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */
+
/* This needs to be big enough to accommodate "struct cursor", while
leaving some slack for future expansion. Changing this value will
require recompiling all users of this library. Stack allocation is
relatively cheap and unwind-state copying is relatively rare, so we
want to err on making it rather too big than too small. */
-#define UNW_TDEP_CURSOR_LEN 127
+#define UNW_TDEP_CURSOR_LEN 511
-typedef uint64_t unw_word_t;
+typedef uint32_t unw_word_t;
-typedef struct
+typedef union
{
- /* no PA-RISC-specific auxiliary proc-info */
+ struct { unw_word_t bits[2]; } raw;
+ double val;
}
-unw_tdep_proc_info_t;
+unw_tdep_fpreg_t;
typedef enum
{
- /* Note: general registers are excepted to start with index 0.
+ /* Note: general registers are expected to start with index 0.
This convention facilitates architecture-independent
implementation of the C++ exception handling ABI. See
_Unwind_SetGR() and _Unwind_GetGR() for details. */
UNW_HPPA_GR = 0,
+ UNW_HPPA_RP = 2, /* return pointer */
+ UNW_HPPA_FP = 3, /* frame pointer */
UNW_HPPA_SP = UNW_HPPA_GR + 30,
UNW_HPPA_FR = UNW_HPPA_GR + 32,
@@ -66,13 +70,29 @@ typedef enum
/* other "preserved" registers (fpsr etc.)... */
+ /* PA-RISC has 4 exception-argument registers but they're not
+ contiguous. To deal with this, we define 4 pseudo
+ exception-handling registers which we then alias to the actual
+ physical register. */
+
+ UNW_HPPA_EH0 = UNW_HPPA_IP + 1, /* alias for UNW_HPPA_GR + 20 */
+ UNW_HPPA_EH1 = UNW_HPPA_EH0 + 1, /* alias for UNW_HPPA_GR + 21 */
+ UNW_HPPA_EH2 = UNW_HPPA_EH1 + 1, /* alias for UNW_HPPA_GR + 22 */
+ UNW_HPPA_EH3 = UNW_HPPA_EH2 + 1, /* alias for UNW_HPPA_GR + 31 */
+
+ /* frame info (read-only) */
+ UNW_HPPA_CFA,
+
UNW_TDEP_LAST_REG = UNW_HPPA_IP,
UNW_TDEP_IP = UNW_HPPA_IP,
- UNW_TDEP_SP = UNW_HPPA_SP
+ UNW_TDEP_SP = UNW_HPPA_SP,
+ UNW_TDEP_EH = UNW_HPPA_EH0
}
hppa_regnum_t;
+#define UNW_TDEP_NUM_EH_REGS 4
+
typedef struct unw_tdep_save_loc
{
/* Additional target-dependent info on a save location. */
@@ -82,18 +102,21 @@ unw_tdep_save_loc_t;
/* On PA-RISC, we can directly use ucontext_t as the unwind context. */
typedef ucontext_t unw_tdep_context_t;
-/* XXX this is not ideal: an application should not be prevented from
- using the "getcontext" name just because it's using libunwind. We
- can't just use __getcontext() either, because that isn't exported
- by glibc... */
-#define unw_tdep_getcontext(uc) (getcontext (uc), 0)
-
-/* XXX fixme: */
-#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_HPPA_FR) < 128)
+#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_HPPA_FR) < 32)
#include "libunwind-dynamic.h"
+
+typedef struct
+ {
+ /* no PA-RISC-specific auxiliary proc-info */
+ }
+unw_tdep_proc_info_t;
+
#include "libunwind-common.h"
+#define unw_tdep_getcontext UNW_ARCH_OBJ (getcontext)
+extern int unw_tdep_getcontext (unw_tdep_context_t *);
+
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif