diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-15 10:18:21 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-03-15 10:18:21 +0000 |
commit | 9081a51e986b6d0a308793e137d21355f3f184cf (patch) | |
tree | 11521398006c65e3f25600bd6197110990c7bbc5 | |
parent | 511fa697095b1912fce172d91909aa1cb8657aed (diff) | |
download | gcc-9081a51e986b6d0a308793e137d21355f3f184cf.tar.gz |
add comments
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50805 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/unwind-dw2.c | 14 | ||||
-rw-r--r-- | gcc/unwind.inc | 7 |
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index d3828e97ad4..e873f50d8cc 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -48,7 +48,9 @@ #define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS #endif -/* This is the register and unwind state for a particular frame. */ +/* This is the register and unwind state for a particular frame. This + provides the information necessary to unwind up past a frame and return + to its caller. */ struct _Unwind_Context { void *reg[DWARF_FRAME_REGISTERS+1]; @@ -889,6 +891,11 @@ execute_cfa_program (const unsigned char *insn_ptr, } } +/* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for + its caller and decode it into FS. This function also sets the + args_size and lsda members of CONTEXT, as they are really information + about the caller's frame. */ + static _Unwind_Reason_Code uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs) { @@ -1083,6 +1090,11 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs) } } +/* CONTEXT describes the unwind state for a frame, and FS describes the FDE + of its caller. Update CONTEXT to refer to the caller as well. Note + that the args_size and lsda members are not updated here, but later in + uw_frame_state_for. */ + static void uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) { diff --git a/gcc/unwind.inc b/gcc/unwind.inc index f00441ea024..0422cb81a03 100644 --- a/gcc/unwind.inc +++ b/gcc/unwind.inc @@ -72,7 +72,6 @@ _Unwind_RaiseException_Phase2(struct _Unwind_Exception *exc, return code; } - /* Raise an exception, passing along the given exception object. */ _Unwind_Reason_Code @@ -81,6 +80,7 @@ _Unwind_RaiseException(struct _Unwind_Exception *exc) struct _Unwind_Context this_context, cur_context; _Unwind_Reason_Code code; + /* Set up this_context to describe the current stack frame. */ uw_init_context (&this_context); cur_context = this_context; @@ -90,6 +90,8 @@ _Unwind_RaiseException(struct _Unwind_Exception *exc) { _Unwind_FrameState fs; + /* Set up fs to describe the FDE for the caller of cur_context. The + first time through the loop, that means __cxa_throw. */ code = uw_frame_state_for (&cur_context, &fs); if (code == _URC_END_OF_STACK) @@ -112,6 +114,7 @@ _Unwind_RaiseException(struct _Unwind_Exception *exc) return _URC_FATAL_PHASE1_ERROR; } + /* Update cur_context to describe the same frame as fs. */ uw_update_context (&cur_context, &fs); } @@ -144,6 +147,7 @@ _Unwind_ForcedUnwind_Phase2(struct _Unwind_Exception *exc, _Unwind_FrameState fs; int action; + /* Set up fs to describe the FDE for the caller of cur_context. */ code = uw_frame_state_for (context, &fs); if (code != _URC_NO_REASON && code != _URC_END_OF_STACK) return _URC_FATAL_PHASE2_ERROR; @@ -172,6 +176,7 @@ _Unwind_ForcedUnwind_Phase2(struct _Unwind_Exception *exc, return _URC_FATAL_PHASE2_ERROR; } + /* Update cur_context to describe the same frame as fs. */ uw_update_context (context, &fs); } |