2 * Debugger stack handling
4 * Copyright 1995 Alexandre Julliard
28 /***********************************************************************
31 * Dump the top of the stack
33 void DEBUG_InfoStack(void)
37 fprintf(stderr,"Stack dump:\n");
38 if ((SS_reg(DEBUG_context) == WINE_DATA_SELECTOR) ||
39 (GET_SEL_FLAGS(SS_reg(DEBUG_context)) & LDT_FLAGS_32BIT))
42 addr.off = ESP_reg(DEBUG_context);
43 DEBUG_ExamineMemory( &addr, 10, 'x' );
45 else /* 16-bit mode */
47 addr.seg = SS_reg(DEBUG_context);
48 addr.off = SP_reg(DEBUG_context);
49 DEBUG_ExamineMemory( &addr, 10, 'w' );
55 /***********************************************************************
58 * Display a stack back-trace.
60 void DEBUG_BackTrace(void)
65 fprintf(stderr,"Backtrace:\n");
66 if (SS_reg(DEBUG_context) == WINE_DATA_SELECTOR) /* 32-bit mode */
68 FRAME32 *frame = (FRAME32 *)EBP_reg(DEBUG_context);
72 fprintf(stderr,"%d ",frameno++);
74 DEBUG_PrintAddress( &addr, 32 );
75 fprintf( stderr, "\n" );
76 frame = (FRAME32 *)frame->bp;
79 else /* 16-bit mode */
81 FRAME16 *frame = (FRAME16 *)PTR_SEG_OFF_TO_LIN( SS_reg(DEBUG_context),
82 BP_reg(DEBUG_context) & ~1 );
83 WORD cs = CS_reg(DEBUG_context);
84 if (GET_SEL_FLAGS(SS_reg(DEBUG_context)) & LDT_FLAGS_32BIT)
86 fprintf( stderr, "Not implemented: 32-bit backtrace on a different stack segment.\n" );
91 if (frame->bp & 1) cs = frame->cs;
92 fprintf( stderr,"%d ", frameno++ );
95 DEBUG_PrintAddress( &addr, 16 );
96 fprintf( stderr, "\n" );
97 frame = (FRAME16 *)PTR_SEG_OFF_TO_LIN( SS_reg(DEBUG_context),
101 fprintf( stderr, "\n" );