mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 19:44:11 +08:00
Minor bug fixes from last big checkin.
This commit is contained in:
parent
d26c07d124
commit
d6434f3974
@ -39,12 +39,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include <sys/core.h>
|
||||
#include <sys/ldr.h>
|
||||
|
||||
|
||||
extern struct obstack frame_cache_obstack;
|
||||
|
||||
extern int errno;
|
||||
|
||||
/* Nonzero if we just simulated a single step break. */
|
||||
int one_stepped;
|
||||
|
||||
|
||||
/* Breakpoint shadows for the single step instructions will be kept here. */
|
||||
|
||||
static struct sstep_breaks {
|
||||
@ -399,7 +401,7 @@ FIXME: This whole concept is broken. You should be able to detect
|
||||
a dummy stack frame *on the user's stack itself*. When you do,
|
||||
then you know the format of that stack frame -- including its
|
||||
saved SP register! There should *not* be a separate stack in the
|
||||
GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92 */
|
||||
GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92
|
||||
*/
|
||||
|
||||
pop_dummy_frame ()
|
||||
@ -546,7 +548,7 @@ fix_call_dummy(dummyname, pc, fun, nargs, type)
|
||||
*/
|
||||
void
|
||||
function_frame_info (pc, fdata)
|
||||
int pc;
|
||||
CORE_ADDR pc;
|
||||
struct aix_framedata *fdata;
|
||||
{
|
||||
unsigned int tmp;
|
||||
|
@ -98,6 +98,8 @@ struct aix_framedata {
|
||||
char frameless; /* true if frameless functions. */
|
||||
};
|
||||
|
||||
void
|
||||
function_frame_info PARAMS ((CORE_ADDR, struct aix_framedata *));
|
||||
|
||||
/* Define the byte order of the machine. */
|
||||
|
||||
@ -491,43 +493,44 @@ extern unsigned int rs6000_struct_return_address;
|
||||
|
||||
#define FRAME_FIND_SAVED_REGS(FRAME_INFO, FRAME_SAVED_REGS) \
|
||||
{ \
|
||||
int ii, frame_addr, func_start; \
|
||||
struct aix_framedata fdata; \
|
||||
\
|
||||
/* find the start of the function and collect info about its frame. */ \
|
||||
\
|
||||
func_start = get_pc_function_start ((FRAME_INFO)->pc) + FUNCTION_START_OFFSET;\
|
||||
function_frame_info (func_start, &fdata); \
|
||||
bzero (&(FRAME_SAVED_REGS), sizeof (FRAME_SAVED_REGS)); \
|
||||
\
|
||||
/* if there were any saved registers, figure out parent's stack pointer. */ \
|
||||
frame_addr = 0; \
|
||||
/* the following is true only if the frame doesn't have a call to alloca(), \
|
||||
FIXME. */ \
|
||||
if (fdata.saved_fpr >= 0 || fdata.saved_gpr >= 0) { \
|
||||
if ((FRAME_INFO)->prev && (FRAME_INFO)->prev->frame) \
|
||||
frame_addr = (FRAME_INFO)->prev->frame; \
|
||||
else \
|
||||
frame_addr = read_memory_integer ((FRAME_INFO)->frame, 4); \
|
||||
} \
|
||||
\
|
||||
/* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. All fpr's \
|
||||
from saved_fpr to fp31 are saved right underneath caller stack pointer, \
|
||||
starting from fp31 first. */ \
|
||||
\
|
||||
if (fdata.saved_fpr >= 0) { \
|
||||
for (ii=31; ii >= fdata.saved_fpr; --ii) \
|
||||
(FRAME_SAVED_REGS).regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8); \
|
||||
frame_addr -= (32 - fdata.saved_fpr) * 8; \
|
||||
} \
|
||||
\
|
||||
/* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. All gpr's \
|
||||
from saved_gpr to gpr31 are saved right under saved fprs, starting \
|
||||
from r31 first. */ \
|
||||
\
|
||||
if (fdata.saved_gpr >= 0) \
|
||||
for (ii=31; ii >= fdata.saved_gpr; --ii) \
|
||||
(FRAME_SAVED_REGS).regs [ii] = frame_addr - ((32 - ii) * 4); \
|
||||
int ii; \
|
||||
CORE_ADDR frame_addr, func_start; \
|
||||
struct aix_framedata fdata; \
|
||||
\
|
||||
/* find the start of the function and collect info about its frame. */\
|
||||
\
|
||||
func_start = get_pc_function_start ((FRAME_INFO)->pc) + FUNCTION_START_OFFSET; \
|
||||
function_frame_info (func_start, &fdata); \
|
||||
bzero (&(FRAME_SAVED_REGS), sizeof (FRAME_SAVED_REGS)); \
|
||||
\
|
||||
/* if there were any saved registers, figure out parent's stack pointer. */ \
|
||||
frame_addr = 0; \
|
||||
/* the following is true only if the frame doesn't have a call to alloca(), \
|
||||
FIXME. */ \
|
||||
if (fdata.saved_fpr >= 0 || fdata.saved_gpr >= 0) { \
|
||||
if ((FRAME_INFO)->prev && (FRAME_INFO)->prev->frame) \
|
||||
frame_addr = (FRAME_INFO)->prev->frame; \
|
||||
else \
|
||||
frame_addr = read_memory_integer ((FRAME_INFO)->frame, 4); \
|
||||
} \
|
||||
\
|
||||
/* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. All fpr's \
|
||||
from saved_fpr to fp31 are saved right underneath caller stack pointer, \
|
||||
starting from fp31 first. */ \
|
||||
\
|
||||
if (fdata.saved_fpr >= 0) { \
|
||||
for (ii=31; ii >= fdata.saved_fpr; --ii) \
|
||||
(FRAME_SAVED_REGS).regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8); \
|
||||
frame_addr -= (32 - fdata.saved_fpr) * 8; \
|
||||
} \
|
||||
\
|
||||
/* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. All gpr's \
|
||||
from saved_gpr to gpr31 are saved right under saved fprs, starting \
|
||||
from r31 first. */ \
|
||||
\
|
||||
if (fdata.saved_gpr >= 0) \
|
||||
for (ii=31; ii >= fdata.saved_gpr; --ii) \
|
||||
(FRAME_SAVED_REGS).regs [ii] = frame_addr - ((32 - ii) * 4); \
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user