mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-29 02:07:39 +01:00
Include architecture-specific header file first and then define
various other types and constants based on it. (unw_error_t): A UNW_EINVAL, UNW_EBADVERSION, and UNW_ENOINFO. (unw_frame_regnum_t): Instead of hardcoding the numbers for the well-known frame registers, use the architecture-specific (target-dependent) values instead. (Logical change 1.5)
This commit is contained in:
parent
7820abd977
commit
cfdd6ece84
1 changed files with 14 additions and 9 deletions
|
@ -24,6 +24,8 @@ License. */
|
||||||
#ifndef LIBUNWIND_H
|
#ifndef LIBUNWIND_H
|
||||||
#define LIBUNWIND_H
|
#define LIBUNWIND_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "libunwind-config.h"
|
#include "libunwind-config.h"
|
||||||
|
|
||||||
#ifdef UNW_LOCAL_ONLY
|
#ifdef UNW_LOCAL_ONLY
|
||||||
|
@ -36,14 +38,14 @@ License. */
|
||||||
#define UNW_PASTE(x,y) UNW_PASTE2(x,y)
|
#define UNW_PASTE(x,y) UNW_PASTE2(x,y)
|
||||||
#define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn)
|
#define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn)
|
||||||
|
|
||||||
typedef unsigned long unw_word_t;
|
|
||||||
|
|
||||||
#if defined(UNW_TARGET_IA64)
|
#if defined(UNW_TARGET_IA64)
|
||||||
# include "libunwind-ia64.h"
|
# include "libunwind-ia64.h"
|
||||||
#else
|
#else
|
||||||
# error Sorry, target architecture is not yet supported.
|
# error Sorry, target architecture is not yet supported.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef unw_tdep_word_t unw_word_t;
|
||||||
|
|
||||||
/* This needs to be big enough to accommodate the unwind state of any
|
/* This needs to be big enough to accommodate the unwind state of any
|
||||||
architecture, while leaving some slack for future expansion.
|
architecture, while leaving some slack for future expansion.
|
||||||
Changing this value will require recompiling all users of this
|
Changing this value will require recompiling all users of this
|
||||||
|
@ -61,7 +63,10 @@ typedef enum
|
||||||
UNW_EREADONLYREG, /* attempt to write read-only register */
|
UNW_EREADONLYREG, /* attempt to write read-only register */
|
||||||
UNW_ESTOPUNWIND, /* stop unwinding */
|
UNW_ESTOPUNWIND, /* stop unwinding */
|
||||||
UNW_EINVALIDIP, /* invalid IP */
|
UNW_EINVALIDIP, /* invalid IP */
|
||||||
UNW_EBADFRAME /* bad frame */
|
UNW_EBADFRAME, /* bad frame */
|
||||||
|
UNW_EINVAL, /* unsupported operation */
|
||||||
|
UNW_EBADVERSION, /* unwind info has unsupported version */
|
||||||
|
UNW_ENOINFO /* no unwind info found */
|
||||||
}
|
}
|
||||||
unw_error_t;
|
unw_error_t;
|
||||||
|
|
||||||
|
@ -74,11 +79,11 @@ unw_error_t;
|
||||||
last valid register index is given by UNW_REG_LAST. */
|
last valid register index is given by UNW_REG_LAST. */
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
UNW_REG_IP = -1, /* (rw) instruction pointer (pc) */
|
UNW_REG_IP = UNW_TDEP_IP, /* (rw) instruction pointer (pc) */
|
||||||
UNW_REG_SP = -2, /* (ro) stack pointer */
|
UNW_REG_SP = UNW_TDEP_SP, /* (ro) stack pointer */
|
||||||
UNW_REG_PROC_START = -3, /* (ro) starting addr. of procedure */
|
UNW_REG_PROC_START = UNW_TDEP_PROC_START, /* (ro) proc startaddr */
|
||||||
UNW_REG_HANDLER = -4, /* (ro) addr. of "personality routine" */
|
UNW_REG_HANDLER = UNW_TDEP_HANDLER, /* (ro) addr. of personality routine */
|
||||||
UNW_REG_LSDA = -5, /* (ro) addr. of language-specific data area */
|
UNW_REG_LSDA = UNW_TDEP_LSDA, /* (ro) addr. of lang.-specific data */
|
||||||
UNW_REG_LAST = UNW_TDEP_LAST_REG
|
UNW_REG_LAST = UNW_TDEP_LAST_REG
|
||||||
}
|
}
|
||||||
unw_frame_regnum_t;
|
unw_frame_regnum_t;
|
||||||
|
@ -111,7 +116,7 @@ typedef unw_tdep_context_t unw_context_t;
|
||||||
only through the "raw.bits" member. */
|
only through the "raw.bits" member. */
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
struct { unsigned long bits[1]; } raw;
|
struct { unw_word_t bits[1]; } raw;
|
||||||
long double dummy; /* dummy to force 16-byte alignment */
|
long double dummy; /* dummy to force 16-byte alignment */
|
||||||
}
|
}
|
||||||
unw_fpreg_t;
|
unw_fpreg_t;
|
||||||
|
|
Loading…
Reference in a new issue