Commit b97644fc by Jim Wilson Committed by Jim Wilson

Minor cleanup of ia64 unwind handler code.

	* frame.h (IA64_UNW_EHANDLER, IA64_UNW_UHANDLER): New.
	* config/ia64/frame-ia64.c (__get_personality): Return zero if neither
	EHANDLER nor UHANDLER bit is set.
	(__get_except_table): Likewise.

From-SVN: r35922
parent 215e4ee7
2000-08-23 Jim Wilson <wilson@cygnus.com>
* frame.h (IA64_UNW_EHANDLER, IA64_UNW_UHANDLER): New.
* config/ia64/frame-ia64.c (__get_personality): Return zero if neither
EHANDLER nor UHANDLER bit is set.
(__get_except_table): Likewise.
2000-08-23 Nick Clifton <nickc@redhat.com> 2000-08-23 Nick Clifton <nickc@redhat.com>
* config/arm/lib1funcs.asm: Replace upper case condition codes * config/arm/lib1funcs.asm: Replace upper case condition codes
......
...@@ -1376,27 +1376,38 @@ __build_ia64_frame_state (pc, frame, bsp, sp, pc_base_ptr) ...@@ -1376,27 +1376,38 @@ __build_ia64_frame_state (pc, frame, bsp, sp, pc_base_ptr)
return unw_info_ptr; return unw_info_ptr;
} }
/* Given an unwind info pointer, return the personailty routine. */ /* Given an unwind info pointer, return the personality routine. */
void * void *
__get_personality (ptr) __get_personality (ptr)
unwind_info_ptr *ptr; unwind_info_ptr *ptr;
{ {
void **p; void **p;
/* There is a personality routine only if one of the EHANDLER or UHANDLER
bits is set. */
if (! (IA64_UNW_HDR_FLAGS (ptr->header)
& (IA64_UNW_EHANDLER|IA64_UNW_UHANDLER)))
return 0;
p = (void **) (ptr->unwind_descriptors p = (void **) (ptr->unwind_descriptors
+ IA64_UNW_HDR_LENGTH (ptr->header) * 8); + IA64_UNW_HDR_LENGTH (ptr->header) * 8);
return *p; return *p;
} }
/* Given an unwind info pointer, return the exception table. */
void * void *
__get_except_table (ptr) __get_except_table (ptr)
unwind_info_ptr *ptr; unwind_info_ptr *ptr;
{ {
void **p, *table; void *table;
p = (void **) (ptr->unwind_descriptors
+ IA64_UNW_HDR_LENGTH (ptr->header) * 8); /* If there is no personality, there is no handler data.
/* If there is no personality, there is no handler data. */ There is a personality routine only if one of the EHANDLER or UHANDLER
if (*p == 0) bits is set. */
if (! (IA64_UNW_HDR_FLAGS (ptr->header)
& (IA64_UNW_EHANDLER|IA64_UNW_UHANDLER)))
return 0; return 0;
table = (void *) (ptr->unwind_descriptors table = (void *) (ptr->unwind_descriptors
+ IA64_UNW_HDR_LENGTH (ptr->header) * 8 + 8); + IA64_UNW_HDR_LENGTH (ptr->header) * 8 + 8);
return table; return table;
......
...@@ -267,6 +267,10 @@ typedef struct unwind_info_ptr ...@@ -267,6 +267,10 @@ typedef struct unwind_info_ptr
#define IA64_UNW_HDR_FLAGS(x) (((x) >> 32) & 0xffffUL) #define IA64_UNW_HDR_FLAGS(x) (((x) >> 32) & 0xffffUL)
#define IA64_UNW_HDR_VERSION(x) (((x) >> 48) & 0xffffUL) #define IA64_UNW_HDR_VERSION(x) (((x) >> 48) & 0xffffUL)
/* Header flag bits, after extraction by IA64_UNW_HDR_FLAGS. */
#define IA64_UNW_EHANDLER 0x1
#define IA64_UNW_UHANDLER 0x2
extern unwind_info_ptr *__build_ia64_frame_state (unsigned char *, extern unwind_info_ptr *__build_ia64_frame_state (unsigned char *,
ia64_frame_state *, ia64_frame_state *,
void *, void *, void *, void *,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment