mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-18 17:50:29 +02:00
(scm_t_contregs): New 'offset' member for relocating debug frames.
(scm_make_continuation): Set it.
This commit is contained in:
parent
e6e63c5632
commit
5c5c27dc0d
2 changed files with 14 additions and 2 deletions
|
@ -134,6 +134,7 @@ scm_make_continuation (int *first)
|
||||||
#if ! SCM_STACK_GROWS_UP
|
#if ! SCM_STACK_GROWS_UP
|
||||||
src -= stack_size;
|
src -= stack_size;
|
||||||
#endif
|
#endif
|
||||||
|
continuation->offset = continuation->stack - src;
|
||||||
memcpy (continuation->stack, src, sizeof (SCM_STACKITEM) * stack_size);
|
memcpy (continuation->stack, src, sizeof (SCM_STACKITEM) * stack_size);
|
||||||
|
|
||||||
#ifdef __ia64__
|
#ifdef __ia64__
|
||||||
|
|
|
@ -55,8 +55,19 @@ typedef struct
|
||||||
size_t num_stack_items; /* size of the saved stack. */
|
size_t num_stack_items; /* size of the saved stack. */
|
||||||
unsigned long seq; /* dynamic root identifier. */
|
unsigned long seq; /* dynamic root identifier. */
|
||||||
|
|
||||||
/* the most recently created debug frame on the live stack, before
|
/* The offset from the live stack location and this copy. This is
|
||||||
it was saved. */
|
used to adjust pointers from within the copied stack to the stack
|
||||||
|
itself.
|
||||||
|
|
||||||
|
Thus, when you read a pointer from the copied stack that points
|
||||||
|
into the live stack, you need to add OFFSET so that it points
|
||||||
|
into the copy.
|
||||||
|
*/
|
||||||
|
scm_t_ptrdiff offset;
|
||||||
|
|
||||||
|
/* The most recently created debug frame on the live stack, before
|
||||||
|
it was saved. This need to be adjusted with OFFSET, above.
|
||||||
|
*/
|
||||||
struct scm_t_debug_frame *dframe;
|
struct scm_t_debug_frame *dframe;
|
||||||
|
|
||||||
SCM_STACKITEM stack[1]; /* copied stack of size num_stack_items. */
|
SCM_STACKITEM stack[1]; /* copied stack of size num_stack_items. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue