Thread View: gnu.gdb.bug
1 messages
1 total messages
Started by Adam de Boor
Sat, 12 Aug 1989 06:09
better support for isi and sun3 w/o fpu
Author: Adam de Boor
Date: Sat, 12 Aug 1989 06:09
Date: Sat, 12 Aug 1989 06:09
205 lines
8147 bytes
8147 bytes
Enclosed please find modifications to the isi and sun3 configuration files to
better support (i.e. w/o core dumps) non-fpu systems. My impression that these
form the bulk of the systems sun and isi distribute, but that could be my
own skewed perspective of the world.
The changes to m-isi.h are to be applied to the file I assigned to the FSF
last month. The changes to m-sun3.h are missing one change that I made
in the 3.1 config file and transfered to the 3.2 before I placed the thing
under RCS. The change is the alter the number of registers, as:
#ifdef HAVEFPU
#define NUM_REGS 31
#else
#define NUM_REGS 18
#endif
"patch" will reject one of the patches for this file because it caught the
leading edge of this change. The patch contains a comment explaining the choice
of "HAVEFPU" and the reason for the reduction.
With these patches, I am now able (yea!) to call functions in the inferior,
much to my delight.
a
*** /tmp/,RCSt1a27965 Fri Aug 11 23:04:15 1989
--- m-isi.h Fri Aug 11 23:03:56 1989
***************
*** 464,469 ****
--- 464,478 ----
/* Push an empty stack frame, to record the current PC, etc. */
+ #ifdef ISI68881
+ #define PUSH_FP_REGS \
+ for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
+ { read_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); \
+ sp = push_bytes (sp, raw_buffer, 12); }
+ #else
+ #define PUSH_FP_REGS
+ #endif
+
#define PUSH_DUMMY_FRAME \
{ register CORE_ADDR sp = read_register (SP_REGNUM); \
register int regnum; \
***************
*** 471,479 ****
sp = push_word (sp, read_register (PC_REGNUM)); \
sp = push_word (sp, read_register (FP_REGNUM)); \
write_register (FP_REGNUM, sp); \
! for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
! { read_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); \
! sp = push_bytes (sp, raw_buffer, 12); } \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
sp = push_word (sp, read_register (regnum)); \
sp = push_word (sp, read_register (PS_REGNUM)); \
--- 480,486 ----
sp = push_word (sp, read_register (PC_REGNUM)); \
sp = push_word (sp, read_register (FP_REGNUM)); \
write_register (FP_REGNUM, sp); \
! PUSH_FP_REGS \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
sp = push_word (sp, read_register (regnum)); \
sp = push_word (sp, read_register (PS_REGNUM)); \
***************
*** 481,486 ****
--- 488,503 ----
/* Discard from the stack the innermost frame, restoring all registers. */
+ #ifdef ISI68881
+ #define POP_FP_REGS \
+ for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
+ if (fsr.regs[regnum]) \
+ { read_memory (fsr.regs[regnum], raw_buffer, 12); \
+ write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); }
+ #else
+ #define POP_FP_REGS
+ #endif
+
#define POP_FRAME \
{ register FRAME frame = get_current_frame (); \
register CORE_ADDR fp; \
***************
*** 491,500 ****
fi = get_frame_info (frame); \
fp = fi->frame; \
get_frame_saved_regs (fi, &fsr); \
! for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
! if (fsr.regs[regnum]) \
! { read_memory (fsr.regs[regnum], raw_buffer, 12); \
! write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); }\
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
if (fsr.regs[regnum]) \
write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
--- 508,514 ----
fi = get_frame_info (frame); \
fp = fi->frame; \
get_frame_saved_regs (fi, &fsr); \
! POP_FP_REGS \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
if (fsr.regs[regnum]) \
write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
*** /tmp/,RCSt1a27965 Fri Aug 11 23:04:20 1989
--- m-sun3.h Fri Aug 11 23:04:03 1989
***************
*** 101,107 ****
#define REGISTER_TYPE long
! /* Number of machine registers */
#ifdef HAVEFPU
#define NUM_REGS 31
--- 101,112 ----
#define REGISTER_TYPE long
! /* Number of machine registers
! If HAVEFPU not defined, no floating-point coprocessor is assumed to exist.
! We reduce the number of registers to avoid fetching and trying to convert
! any of the fp registers, since convert_to_68881 and convert_from_68881
! will cause us to die if they are executed. I'm assuming that most
! suns don't come with an FPU, hence the default is no FPU */
#ifdef HAVEFPU
#define NUM_REGS 31
***************
*** 389,394 ****
--- 394,408 ----
/* Push an empty stack frame, to record the current PC, etc. */
+ #ifdef HAVEFPU
+ #define PUSH_FP_REGS \
+ for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
+ { read_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); \
+ sp = push_bytes (sp, raw_buffer, 12); }
+ #else
+ #define PUSH_FP_REGS
+ #endif
+
#define PUSH_DUMMY_FRAME \
{ register CORE_ADDR sp = read_register (SP_REGNUM); \
register int regnum; \
***************
*** 396,404 ****
sp = push_word (sp, read_register (PC_REGNUM)); \
sp = push_word (sp, read_register (FP_REGNUM)); \
write_register (FP_REGNUM, sp); \
! for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
! { read_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); \
! sp = push_bytes (sp, raw_buffer, 12); } \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
sp = push_word (sp, read_register (regnum)); \
sp = push_word (sp, read_register (PS_REGNUM)); \
--- 410,416 ----
sp = push_word (sp, read_register (PC_REGNUM)); \
sp = push_word (sp, read_register (FP_REGNUM)); \
write_register (FP_REGNUM, sp); \
! PUSH_FP_REGS \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
sp = push_word (sp, read_register (regnum)); \
sp = push_word (sp, read_register (PS_REGNUM)); \
***************
*** 407,412 ****
--- 419,434 ----
/* Discard from the stack the innermost frame,
restoring all saved registers. */
+ #ifdef HAVEFPU
+ #define POP_FP_REGS \
+ for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
+ if (fsr.regs[regnum]) \
+ { read_memory (fsr.regs[regnum], raw_buffer, 12); \
+ write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); }
+ #else
+ #define POP_FP_REGS
+ #endif
+
#define POP_FRAME \
{ register FRAME frame = get_current_frame (); \
register CORE_ADDR fp; \
***************
*** 417,426 ****
fi = get_frame_info (frame); \
fp = fi->frame; \
get_frame_saved_regs (fi, &fsr); \
! for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) \
! if (fsr.regs[regnum]) \
! { read_memory (fsr.regs[regnum], raw_buffer, 12); \
! write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); }\
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
if (fsr.regs[regnum]) \
write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
--- 439,445 ----
fi = get_frame_info (frame); \
fp = fi->frame; \
get_frame_saved_regs (fi, &fsr); \
! POP_FP_REGS \
for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) \
if (fsr.regs[regnum]) \
write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads