2004-03-07 Andrew Cagney <cagney@redhat.com>
* hppa-tdep.c (pa_do_registers_info, pa_do_strcat_registers_info) (pa_print_registers, pa_print_fp_reg, pa_strcat_registers) (pa_strcat_fp_reg, pa_register_look_aside): Delete. * config/pa/tm-hppa.h (DEPRECATED_DO_REGISTERS_INFO) (pa_do_registers_info): Delete.
This commit is contained in:
parent
210197d29b
commit
69b4bbe450
3 changed files with 6 additions and 395 deletions
|
@ -1,5 +1,11 @@
|
|||
2004-03-07 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* config/pa/tm-hppa.h (DEPRECATED_DO_REGISTERS_INFO)
|
||||
(pa_do_registers_info): Delete.
|
||||
* hppa-tdep.c (pa_do_registers_info, pa_do_strcat_registers_info)
|
||||
(pa_print_registers, pa_print_fp_reg, pa_strcat_registers)
|
||||
(pa_strcat_fp_reg, pa_register_look_aside): Delete.
|
||||
|
||||
* infcall.c (legacy_push_dummy_code): Delete #ifdef
|
||||
GDB_TARGET_IS_HPPA code.
|
||||
* config/pa/tm-hppa.h (DEPRECATED_FIX_CALL_DUMMY)
|
||||
|
|
|
@ -90,12 +90,6 @@ extern int hppa_pc_requires_run_before_use (CORE_ADDR pc);
|
|||
(buf)[sizeof(CORE_ADDR) -1] &= ~0x3; \
|
||||
} while (0)
|
||||
|
||||
/* Define DEPRECATED_DO_REGISTERS_INFO() to do machine-specific
|
||||
formatting of register dumps. */
|
||||
|
||||
#define DEPRECATED_DO_REGISTERS_INFO(_regnum, fp) pa_do_registers_info (_regnum, fp)
|
||||
extern void pa_do_registers_info (int, int);
|
||||
|
||||
/* PA specific macro to see if the current instruction is nullified. */
|
||||
#ifndef INSTRUCTION_NULLIFIED
|
||||
extern int hppa_instruction_nullified (void);
|
||||
|
|
389
gdb/hppa-tdep.c
389
gdb/hppa-tdep.c
|
@ -136,11 +136,6 @@ static void internalize_unwinds (struct objfile *,
|
|||
struct unwind_table_entry *,
|
||||
asection *, unsigned int,
|
||||
unsigned int, CORE_ADDR);
|
||||
static void pa_print_registers (char *, int, int);
|
||||
static void pa_strcat_registers (char *, int, int, struct ui_file *);
|
||||
static void pa_register_look_aside (char *, int, long *);
|
||||
static void pa_print_fp_reg (int);
|
||||
static void pa_strcat_fp_reg (int, struct ui_file *, enum precision_type);
|
||||
static void record_text_segment_lowaddr (bfd *, asection *, void *);
|
||||
/* FIXME: brobecker 2002-11-07: We will likely be able to make the
|
||||
following functions static, once we hppa is partially multiarched. */
|
||||
|
@ -1257,390 +1252,6 @@ hppa_alignof (struct type *type)
|
|||
}
|
||||
}
|
||||
|
||||
/* Print the register regnum, or all registers if regnum is -1 */
|
||||
|
||||
void
|
||||
pa_do_registers_info (int regnum, int fpregs)
|
||||
{
|
||||
char *raw_regs = alloca (DEPRECATED_REGISTER_BYTES);
|
||||
int i;
|
||||
|
||||
/* Make a copy of gdb's save area (may cause actual
|
||||
reads from the target). */
|
||||
for (i = 0; i < NUM_REGS; i++)
|
||||
frame_register_read (deprecated_selected_frame, i,
|
||||
raw_regs + DEPRECATED_REGISTER_BYTE (i));
|
||||
|
||||
if (regnum == -1)
|
||||
pa_print_registers (raw_regs, regnum, fpregs);
|
||||
else if (regnum < FP4_REGNUM)
|
||||
{
|
||||
long reg_val[2];
|
||||
|
||||
/* Why is the value not passed through "extract_signed_integer"
|
||||
as in "pa_print_registers" below? */
|
||||
pa_register_look_aside (raw_regs, regnum, ®_val[0]);
|
||||
|
||||
if (!is_pa_2)
|
||||
{
|
||||
printf_unfiltered ("%s %lx\n", REGISTER_NAME (regnum), reg_val[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Fancy % formats to prevent leading zeros. */
|
||||
if (reg_val[0] == 0)
|
||||
printf_unfiltered ("%s %lx\n", REGISTER_NAME (regnum), reg_val[1]);
|
||||
else
|
||||
printf_unfiltered ("%s %lx%8.8lx\n", REGISTER_NAME (regnum),
|
||||
reg_val[0], reg_val[1]);
|
||||
}
|
||||
}
|
||||
else
|
||||
/* Note that real floating point values only start at
|
||||
FP4_REGNUM. FP0 and up are just status and error
|
||||
registers, which have integral (bit) values. */
|
||||
pa_print_fp_reg (regnum);
|
||||
}
|
||||
|
||||
/********** new function ********************/
|
||||
void
|
||||
pa_do_strcat_registers_info (int regnum, int fpregs, struct ui_file *stream,
|
||||
enum precision_type precision)
|
||||
{
|
||||
char *raw_regs = alloca (DEPRECATED_REGISTER_BYTES);
|
||||
int i;
|
||||
|
||||
/* Make a copy of gdb's save area (may cause actual
|
||||
reads from the target). */
|
||||
for (i = 0; i < NUM_REGS; i++)
|
||||
frame_register_read (deprecated_selected_frame, i,
|
||||
raw_regs + DEPRECATED_REGISTER_BYTE (i));
|
||||
|
||||
if (regnum == -1)
|
||||
pa_strcat_registers (raw_regs, regnum, fpregs, stream);
|
||||
|
||||
else if (regnum < FP4_REGNUM)
|
||||
{
|
||||
long reg_val[2];
|
||||
|
||||
/* Why is the value not passed through "extract_signed_integer"
|
||||
as in "pa_print_registers" below? */
|
||||
pa_register_look_aside (raw_regs, regnum, ®_val[0]);
|
||||
|
||||
if (!is_pa_2)
|
||||
{
|
||||
fprintf_unfiltered (stream, "%s %lx", REGISTER_NAME (regnum), reg_val[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Fancy % formats to prevent leading zeros. */
|
||||
if (reg_val[0] == 0)
|
||||
fprintf_unfiltered (stream, "%s %lx", REGISTER_NAME (regnum),
|
||||
reg_val[1]);
|
||||
else
|
||||
fprintf_unfiltered (stream, "%s %lx%8.8lx", REGISTER_NAME (regnum),
|
||||
reg_val[0], reg_val[1]);
|
||||
}
|
||||
}
|
||||
else
|
||||
/* Note that real floating point values only start at
|
||||
FP4_REGNUM. FP0 and up are just status and error
|
||||
registers, which have integral (bit) values. */
|
||||
pa_strcat_fp_reg (regnum, stream, precision);
|
||||
}
|
||||
|
||||
/* If this is a PA2.0 machine, fetch the real 64-bit register
|
||||
value. Otherwise use the info from gdb's saved register area.
|
||||
|
||||
Note that reg_val is really expected to be an array of longs,
|
||||
with two elements. */
|
||||
static void
|
||||
pa_register_look_aside (char *raw_regs, int regnum, long *raw_val)
|
||||
{
|
||||
static int know_which = 0; /* False */
|
||||
|
||||
int regaddr;
|
||||
unsigned int offset;
|
||||
int i;
|
||||
int start;
|
||||
|
||||
|
||||
char buf[MAX_REGISTER_SIZE];
|
||||
long long reg_val;
|
||||
|
||||
if (!know_which)
|
||||
{
|
||||
if (CPU_PA_RISC2_0 == sysconf (_SC_CPU_VERSION))
|
||||
{
|
||||
is_pa_2 = (1 == 1);
|
||||
}
|
||||
|
||||
know_which = 1; /* True */
|
||||
}
|
||||
|
||||
raw_val[0] = 0;
|
||||
raw_val[1] = 0;
|
||||
|
||||
if (!is_pa_2)
|
||||
{
|
||||
raw_val[1] = *(long *) (raw_regs + DEPRECATED_REGISTER_BYTE (regnum));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Code below copied from hppah-nat.c, with fixes for wide
|
||||
registers, using different area of save_state, etc. */
|
||||
if (regnum == FLAGS_REGNUM || regnum >= FP0_REGNUM ||
|
||||
!HAVE_STRUCT_SAVE_STATE_T || !HAVE_STRUCT_MEMBER_SS_WIDE)
|
||||
{
|
||||
/* Use narrow regs area of save_state and default macro. */
|
||||
offset = U_REGS_OFFSET;
|
||||
regaddr = register_addr (regnum, offset);
|
||||
start = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Use wide regs area, and calculate registers as 8 bytes wide.
|
||||
|
||||
We'd like to do this, but current version of "C" doesn't
|
||||
permit "offsetof":
|
||||
|
||||
offset = offsetof(save_state_t, ss_wide);
|
||||
|
||||
Note that to avoid "C" doing typed pointer arithmetic, we
|
||||
have to cast away the type in our offset calculation:
|
||||
otherwise we get an offset of 1! */
|
||||
|
||||
/* NB: save_state_t is not available before HPUX 9.
|
||||
The ss_wide field is not available previous to HPUX 10.20,
|
||||
so to avoid compile-time warnings, we only compile this for
|
||||
PA 2.0 processors. This control path should only be followed
|
||||
if we're debugging a PA 2.0 processor, so this should not cause
|
||||
problems. */
|
||||
|
||||
/* #if the following code out so that this file can still be
|
||||
compiled on older HPUX boxes (< 10.20) which don't have
|
||||
this structure/structure member. */
|
||||
#if HAVE_STRUCT_SAVE_STATE_T == 1 && HAVE_STRUCT_MEMBER_SS_WIDE == 1
|
||||
save_state_t temp;
|
||||
|
||||
offset = ((int) &temp.ss_wide) - ((int) &temp);
|
||||
regaddr = offset + regnum * 8;
|
||||
start = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
for (i = start; i < 2; i++)
|
||||
{
|
||||
errno = 0;
|
||||
raw_val[i] = call_ptrace (PT_RUREGS, PIDGET (inferior_ptid),
|
||||
(PTRACE_ARG3_TYPE) regaddr, 0);
|
||||
if (errno != 0)
|
||||
{
|
||||
/* Warning, not error, in case we are attached; sometimes the
|
||||
kernel doesn't let us at the registers. */
|
||||
char *err = safe_strerror (errno);
|
||||
char *msg = alloca (strlen (err) + 128);
|
||||
sprintf (msg, "reading register %s: %s", REGISTER_NAME (regnum), err);
|
||||
warning (msg);
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
regaddr += sizeof (long);
|
||||
}
|
||||
|
||||
if (regnum == PCOQ_HEAD_REGNUM || regnum == PCOQ_TAIL_REGNUM)
|
||||
raw_val[1] &= ~0x3; /* I think we're masking out space bits */
|
||||
|
||||
error_exit:
|
||||
;
|
||||
}
|
||||
|
||||
/* "Info all-reg" command */
|
||||
|
||||
static void
|
||||
pa_print_registers (char *raw_regs, int regnum, int fpregs)
|
||||
{
|
||||
int i, j;
|
||||
/* Alas, we are compiled so that "long long" is 32 bits */
|
||||
long raw_val[2];
|
||||
long long_val;
|
||||
int rows = 48, columns = 2;
|
||||
|
||||
for (i = 0; i < rows; i++)
|
||||
{
|
||||
for (j = 0; j < columns; j++)
|
||||
{
|
||||
/* We display registers in column-major order. */
|
||||
int regnum = i + j * rows;
|
||||
|
||||
/* Q: Why is the value passed through "extract_signed_integer",
|
||||
while above, in "pa_do_registers_info" it isn't?
|
||||
A: ? */
|
||||
pa_register_look_aside (raw_regs, regnum, &raw_val[0]);
|
||||
|
||||
/* Even fancier % formats to prevent leading zeros
|
||||
and still maintain the output in columns. */
|
||||
if (!is_pa_2)
|
||||
{
|
||||
/* Being big-endian, on this machine the low bits
|
||||
(the ones we want to look at) are in the second longword. */
|
||||
long_val = extract_signed_integer (&raw_val[1], 4);
|
||||
printf_filtered ("%10.10s: %8lx ",
|
||||
REGISTER_NAME (regnum), long_val);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* raw_val = extract_signed_integer(&raw_val, 8); */
|
||||
if (raw_val[0] == 0)
|
||||
printf_filtered ("%10.10s: %8lx ",
|
||||
REGISTER_NAME (regnum), raw_val[1]);
|
||||
else
|
||||
printf_filtered ("%10.10s: %8lx%8.8lx ",
|
||||
REGISTER_NAME (regnum),
|
||||
raw_val[0], raw_val[1]);
|
||||
}
|
||||
}
|
||||
printf_unfiltered ("\n");
|
||||
}
|
||||
|
||||
if (fpregs)
|
||||
for (i = FP4_REGNUM; i < NUM_REGS; i++) /* FP4_REGNUM == 72 */
|
||||
pa_print_fp_reg (i);
|
||||
}
|
||||
|
||||
/************* new function ******************/
|
||||
static void
|
||||
pa_strcat_registers (char *raw_regs, int regnum, int fpregs,
|
||||
struct ui_file *stream)
|
||||
{
|
||||
int i, j;
|
||||
long raw_val[2]; /* Alas, we are compiled so that "long long" is 32 bits */
|
||||
long long_val;
|
||||
enum precision_type precision;
|
||||
|
||||
precision = unspecified_precision;
|
||||
|
||||
for (i = 0; i < 18; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* Q: Why is the value passed through "extract_signed_integer",
|
||||
while above, in "pa_do_registers_info" it isn't?
|
||||
A: ? */
|
||||
pa_register_look_aside (raw_regs, i + (j * 18), &raw_val[0]);
|
||||
|
||||
/* Even fancier % formats to prevent leading zeros
|
||||
and still maintain the output in columns. */
|
||||
if (!is_pa_2)
|
||||
{
|
||||
/* Being big-endian, on this machine the low bits
|
||||
(the ones we want to look at) are in the second longword. */
|
||||
long_val = extract_signed_integer (&raw_val[1], 4);
|
||||
fprintf_filtered (stream, "%8.8s: %8lx ",
|
||||
REGISTER_NAME (i + (j * 18)), long_val);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* raw_val = extract_signed_integer(&raw_val, 8); */
|
||||
if (raw_val[0] == 0)
|
||||
fprintf_filtered (stream, "%8.8s: %8lx ",
|
||||
REGISTER_NAME (i + (j * 18)), raw_val[1]);
|
||||
else
|
||||
fprintf_filtered (stream, "%8.8s: %8lx%8.8lx ",
|
||||
REGISTER_NAME (i + (j * 18)), raw_val[0],
|
||||
raw_val[1]);
|
||||
}
|
||||
}
|
||||
fprintf_unfiltered (stream, "\n");
|
||||
}
|
||||
|
||||
if (fpregs)
|
||||
for (i = FP4_REGNUM; i < NUM_REGS; i++) /* FP4_REGNUM == 72 */
|
||||
pa_strcat_fp_reg (i, stream, precision);
|
||||
}
|
||||
|
||||
static void
|
||||
pa_print_fp_reg (int i)
|
||||
{
|
||||
char raw_buffer[MAX_REGISTER_SIZE];
|
||||
char virtual_buffer[MAX_REGISTER_SIZE];
|
||||
|
||||
/* Get 32bits of data. */
|
||||
frame_register_read (deprecated_selected_frame, i, raw_buffer);
|
||||
|
||||
/* Put it in the buffer. No conversions are ever necessary. */
|
||||
memcpy (virtual_buffer, raw_buffer, DEPRECATED_REGISTER_RAW_SIZE (i));
|
||||
|
||||
fputs_filtered (REGISTER_NAME (i), gdb_stdout);
|
||||
print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), gdb_stdout);
|
||||
fputs_filtered ("(single precision) ", gdb_stdout);
|
||||
|
||||
val_print (DEPRECATED_REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0, gdb_stdout, 0,
|
||||
1, 0, Val_pretty_default);
|
||||
printf_filtered ("\n");
|
||||
|
||||
/* If "i" is even, then this register can also be a double-precision
|
||||
FP register. Dump it out as such. */
|
||||
if ((i % 2) == 0)
|
||||
{
|
||||
/* Get the data in raw format for the 2nd half. */
|
||||
frame_register_read (deprecated_selected_frame, i + 1, raw_buffer);
|
||||
|
||||
/* Copy it into the appropriate part of the virtual buffer. */
|
||||
memcpy (virtual_buffer + DEPRECATED_REGISTER_RAW_SIZE (i), raw_buffer,
|
||||
DEPRECATED_REGISTER_RAW_SIZE (i));
|
||||
|
||||
/* Dump it as a double. */
|
||||
fputs_filtered (REGISTER_NAME (i), gdb_stdout);
|
||||
print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), gdb_stdout);
|
||||
fputs_filtered ("(double precision) ", gdb_stdout);
|
||||
|
||||
val_print (builtin_type_double, virtual_buffer, 0, 0, gdb_stdout, 0,
|
||||
1, 0, Val_pretty_default);
|
||||
printf_filtered ("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*************** new function ***********************/
|
||||
static void
|
||||
pa_strcat_fp_reg (int i, struct ui_file *stream, enum precision_type precision)
|
||||
{
|
||||
char raw_buffer[MAX_REGISTER_SIZE];
|
||||
char virtual_buffer[MAX_REGISTER_SIZE];
|
||||
|
||||
fputs_filtered (REGISTER_NAME (i), stream);
|
||||
print_spaces_filtered (8 - strlen (REGISTER_NAME (i)), stream);
|
||||
|
||||
/* Get 32bits of data. */
|
||||
frame_register_read (deprecated_selected_frame, i, raw_buffer);
|
||||
|
||||
/* Put it in the buffer. No conversions are ever necessary. */
|
||||
memcpy (virtual_buffer, raw_buffer, DEPRECATED_REGISTER_RAW_SIZE (i));
|
||||
|
||||
if (precision == double_precision && (i % 2) == 0)
|
||||
{
|
||||
|
||||
char raw_buf[MAX_REGISTER_SIZE];
|
||||
|
||||
/* Get the data in raw format for the 2nd half. */
|
||||
frame_register_read (deprecated_selected_frame, i + 1, raw_buf);
|
||||
|
||||
/* Copy it into the appropriate part of the virtual buffer. */
|
||||
memcpy (virtual_buffer + DEPRECATED_REGISTER_RAW_SIZE (i), raw_buf,
|
||||
DEPRECATED_REGISTER_RAW_SIZE (i));
|
||||
|
||||
val_print (builtin_type_double, virtual_buffer, 0, 0, stream, 0,
|
||||
1, 0, Val_pretty_default);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
val_print (DEPRECATED_REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0, stream, 0,
|
||||
1, 0, Val_pretty_default);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Return one if PC is in the call path of a trampoline, else return zero.
|
||||
|
||||
Note we return one for *any* call trampoline (long-call, arg-reloc), not
|
||||
|
|
Loading…
Reference in a new issue