Browse Source

* infcmd.c (do_registers_info): Ignore anonymous registers.

* sh-tdep.c (set processor): New command to set specific
	processor type.
	(sh_reg_names, sh3_reg_names): Arrays of register names for
	SH and SH3 processors.
	(sh_set_processor_type): New function.
	* sh3-rom.c (sh3_open): Call it.
	(sh3_regname): Add names of all the bank registers.
	(sh3_supply_register): Clean up formatting.
	* config/sh/tm-sh.h (NUM_REGS, NUM_REALREGS): Increase to include
 	bank registers.
	(REGISTER_NAMES): Add names of bank registers.
	(FP15_REGNUM): Define.
	(REGISTER_VIRTUAL_TYPE): Use it.
	* monitor.c: Clean up some comments.
gdb-4_18-branch
Stan Shebs 31 years ago
parent
commit
00dd4fd9ad
  1. 20
      gdb/ChangeLog
  2. 18
      gdb/config/sh/tm-sh.h
  3. 9
      gdb/infcmd.c
  4. 131
      gdb/sh-tdep.c
  5. 141
      gdb/sh3-rom.c

20
gdb/ChangeLog

@ -1,3 +1,21 @@
Thu Mar 7 17:40:50 1996 Stan Shebs <shebs@andros.cygnus.com>
* infcmd.c (do_registers_info): Ignore anonymous registers.
* sh-tdep.c (set processor): New command to set specific
processor type.
(sh_reg_names, sh3_reg_names): Arrays of register names for
SH and SH3 processors.
(sh_set_processor_type): New function.
* sh3-rom.c (sh3_open): Call it.
(sh3_regname): Add names of all the bank registers.
(sh3_supply_register): Clean up formatting.
* config/sh/tm-sh.h (NUM_REGS, NUM_REALREGS): Increase to include
bank registers.
(REGISTER_NAMES): Add names of bank registers.
(FP15_REGNUM): Define.
(REGISTER_VIRTUAL_TYPE): Use it.
* monitor.c: Clean up some comments.
Thu Mar 7 12:09:51 1996 J.T. Conklin <jtc@rtl.cygnus.com> Thu Mar 7 12:09:51 1996 J.T. Conklin <jtc@rtl.cygnus.com>
* i386b-nat.c: Revert part of Mar 5 change. FreeBSD collapsed the * i386b-nat.c: Revert part of Mar 5 change. FreeBSD collapsed the
@ -12,7 +30,7 @@ Wed Mar 6 17:57:59 1996 Jeffrey A Law (law@cygnus.com)
* breakpoint.c (bfd_lookup_symbol): Provide for all SVR4 systems, * breakpoint.c (bfd_lookup_symbol): Provide for all SVR4 systems,
not just those with HANDLE_SVR4_EXEC_EMULATORS. not just those with HANDLE_SVR4_EXEC_EMULATORS.
* From Peter Schauer: From Peter Schauer:
* breakpoint.c (internal_breakpoint_number): Move to file scope. * breakpoint.c (internal_breakpoint_number): Move to file scope.
(create_solib_event_breakpoint): Use an internal breakpoint number. (create_solib_event_breakpoint): Use an internal breakpoint number.

18
gdb/config/sh/tm-sh.h

@ -1,4 +1,4 @@
/* Parameters for execution on a Hitachi Super-H machine. /* Target-specific definition for a Hitachi Super-H.
Copyright (C) 1993 Free Software Foundation, Inc. Copyright (C) 1993 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -99,7 +99,7 @@ extern CORE_ADDR sh_skip_prologue ();
of data in register N. */ of data in register N. */
#define REGISTER_VIRTUAL_TYPE(N) \ #define REGISTER_VIRTUAL_TYPE(N) \
((((N) >= FP0_REGNUM && (N) < FP0_REGNUM+32) \ ((((N) >= FP0_REGNUM && (N) < FP15_REGNUM) \
|| (N) == FPUL_REGNUM) \ || (N) == FPUL_REGNUM) \
? builtin_type_float : builtin_type_int) ? builtin_type_float : builtin_type_int)
@ -107,14 +107,17 @@ extern CORE_ADDR sh_skip_prologue ();
Entries beyond the first NUM_REGS are ignored. */ Entries beyond the first NUM_REGS are ignored. */
#define REGISTER_NAMES \ #define REGISTER_NAMES \
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
"r8", "r9", "r10","r11","r12","r13","r14","r15",\ "r8", "r9", "r10","r11","r12", "r13", "r14","r15",\
"pc", "pr","gbr","vbr","mach","macl", "sr", "fpul", "fpscr", \ "pc", "pr", "gbr","vbr","mach","macl","sr", \
"fpul","fpscr", \
"fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", \ "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", \
"fr8", "fr9", "fr10","fr11","fr12","fr13","fr14","fr15",\ "fr8", "fr9", "fr10","fr11","fr12","fr13","fr14","fr15",\
"r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", \
"r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1" \
} }
#define NUM_REGS 41 #define NUM_REGS 57
/* Register numbers of various important registers. /* Register numbers of various important registers.
Note that some of these values are "real" register numbers, Note that some of these values are "real" register numbers,
@ -136,8 +139,9 @@ extern CORE_ADDR sh_skip_prologue ();
#define NUM_REALREGS 23 #define NUM_REALREGS 23
#define FPUL_REGNUM 23 #define FPUL_REGNUM 23
#define FP0_REGNUM 25 #define FP0_REGNUM 25
#define FP15_REGNUM 41
#undef NUM_REALREGS #undef NUM_REALREGS
#define NUM_REALREGS 41 #define NUM_REALREGS 57
/* Store the address of the place in which to copy the structure the /* Store the address of the place in which to copy the structure the
subroutine will return. This is called from call_function. subroutine will return. This is called from call_function.

9
gdb/infcmd.c

@ -977,6 +977,11 @@ do_registers_info (regnum, fpregs)
continue; continue;
} }
/* If the register name is empty, it is undefined for this
processor, so don't display anything. */
if (reg_names[i] == NULL || *(reg_names[i]) == '\0')
continue;
fputs_filtered (reg_names[i], gdb_stdout); fputs_filtered (reg_names[i], gdb_stdout);
print_spaces_filtered (15 - strlen (reg_names[i]), gdb_stdout); print_spaces_filtered (15 - strlen (reg_names[i]), gdb_stdout);
@ -1132,7 +1137,7 @@ attach_command (args, from_tty)
char *args; char *args;
int from_tty; int from_tty;
{ {
extern int auto_solib_add_at_startup; extern int auto_solib_add;
dont_repeat (); /* Not for the faint of heart */ dont_repeat (); /* Not for the faint of heart */
@ -1167,7 +1172,7 @@ attach_command (args, from_tty)
#endif #endif
#ifdef SOLIB_ADD #ifdef SOLIB_ADD
if (auto_solib_add_at_startup) if (auto_solib_add)
/* Add shared library symbols from the newly attached process, if any. */ /* Add shared library symbols from the newly attached process, if any. */
SOLIB_ADD ((char *)0, from_tty, (struct target_ops *)0); SOLIB_ADD ((char *)0, from_tty, (struct target_ops *)0);
#endif #endif

131
gdb/sh-tdep.c

@ -1,5 +1,5 @@
/* Target-dependent code for Hitachi Super-H, for GDB. /* Target-dependent code for Hitachi Super-H, for GDB.
Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -32,6 +32,52 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "value.h" #include "value.h"
#include "dis-asm.h" #include "dis-asm.h"
/* Default to the original SH. */
#define DEFAULT_SH_TYPE "sh"
/* This value is the model of SH in use. */
char *sh_processor_type;
char *tmp_sh_processor_type;
/* A set of original names, to be used when restoring back to generic
registers from a specific set. */
char *sh_generic_reg_names[] = REGISTER_NAMES;
char *sh_reg_names[] = {
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
"pc", "pr", "gbr", "vbr", "mach","macl", "sr",
"fpul", "fpscr",
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", ""
};
char *sh3_reg_names[] = {
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
"pc", "pr", "gbr", "vbr", "mach","macl","sr",
"fpul", "fpscr",
"fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
"fr8", "fr9", "fr10","fr11","fr12","fr13","fr14","fr15",
"r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
"r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
};
struct {
char *name;
char **regnames;
} sh_processor_type_table[] = {
{ "sh", sh_reg_names },
{ "sh3", sh3_reg_names },
{ NULL, NULL }
};
/* Prologue looks like /* Prologue looks like
[mov.l <regs>,@-r15]... [mov.l <regs>,@-r15]...
[sts.l pr,@-r15] [sts.l pr,@-r15]
@ -264,6 +310,74 @@ pop_frame ()
flush_cached_frames (); flush_cached_frames ();
} }
/* Command to set the processor type. */
void
sh_set_processor_type_command (args, from_tty)
char *args;
int from_tty;
{
int i;
char *temp;
/* The `set' commands work by setting the value, then calling the hook,
so we let the general command modify a scratch location, then decide
here if we really want to modify the processor type. */
if (tmp_sh_processor_type == NULL || *tmp_sh_processor_type == '\0')
{
printf_unfiltered ("The known SH processor types are as follows:\n\n");
for (i = 0; sh_processor_type_table[i].name != NULL; ++i)
printf_unfiltered ("%s\n", sh_processor_type_table[i].name);
/* Restore the value. */
tmp_sh_processor_type = strsave (sh_processor_type);
return;
}
if (!sh_set_processor_type (tmp_sh_processor_type))
{
/* Restore to a valid value before erroring out. */
temp = tmp_sh_processor_type;
tmp_sh_processor_type = strsave (sh_processor_type);
error ("Unknown processor type `%s'.", temp);
}
}
static void
sh_show_processor_type_command (args, from_tty)
char *args;
int from_tty;
{
}
/* Modify the actual processor type. */
int
sh_set_processor_type (str)
char *str;
{
int i, j;
if (str == NULL)
return 0;
for (i = 0; sh_processor_type_table[i].name != NULL; ++i)
{
if (strcasecmp (str, sh_processor_type_table[i].name) == 0)
{
sh_processor_type = str;
for (j = 0; j < NUM_REGS; ++j)
reg_names[j] = sh_processor_type_table[i].regnames[j];
return 1;
}
}
return 0;
}
/* Print the registers in a form similar to the E7000 */ /* Print the registers in a form similar to the E7000 */
static void static void
@ -301,7 +415,22 @@ show_regs (args, from_tty)
void void
_initialize_sh_tdep () _initialize_sh_tdep ()
{ {
struct cmd_list_element *c;
tm_print_insn = gdb_print_insn_sh; tm_print_insn = gdb_print_insn_sh;
c = add_set_cmd ("processor", class_support, var_string_noescape,
(char *) &tmp_sh_processor_type,
"Set the type of SH processor in use.\n\
Set this to be able to access processor-type-specific registers.\n\
",
&setlist);
c->function.cfunc = sh_set_processor_type_command;
c = add_show_from_set (c, &showlist);
c->function.cfunc = sh_show_processor_type_command;
tmp_sh_processor_type = strsave (DEFAULT_SH_TYPE);
sh_set_processor_type_command (strsave (DEFAULT_SH_TYPE), 0);
add_com ("regs", class_vars, show_regs, "Print all registers"); add_com ("regs", class_vars, show_regs, "Print all registers");
} }

141
gdb/sh3-rom.c

@ -43,64 +43,72 @@ sh3_supply_register (regname, regnamelen, val, vallen)
regno = -1; regno = -1;
if (regnamelen == 2) if (regnamelen == 2)
switch (regname[0]) {
{ switch (regname[0])
case 'S': {
if (regname[1] == 'R') case 'S':
regno = SR_REGNUM; if (regname[1] == 'R')
break; regno = SR_REGNUM;
case 'P': break;
if (regname[1] == 'C') case 'P':
regno = PC_REGNUM; if (regname[1] == 'C')
else if (regname[1] == 'R') regno = PC_REGNUM;
regno = PR_REGNUM; else if (regname[1] == 'R')
break; regno = PR_REGNUM;
} break;
}
}
else if (regnamelen == 3) else if (regnamelen == 3)
switch (regname[0]) {
{ switch (regname[0])
case 'G': {
case 'V': case 'G':
if (regname[1] == 'B' && regname[2] == 'R') case 'V':
if (regname[0] == 'G') if (regname[1] == 'B' && regname[2] == 'R')
regno = VBR_REGNUM; if (regname[0] == 'G')
else regno = VBR_REGNUM;
regno = GBR_REGNUM; else
break; regno = GBR_REGNUM;
break;
#if 0 #if 0
case 'S': case 'S':
if (regname[1] == 'S' && regname[2] == 'R') if (regname[1] == 'S' && regname[2] == 'R')
regno = SSR_REGNUM; regno = SSR_REGNUM;
else if (regname[1] == 'P' && regname[2] == 'C') else if (regname[1] == 'P' && regname[2] == 'C')
regno = SPC_REGNUM; regno = SPC_REGNUM;
break; break;
#endif #endif
} }
}
else if (regnamelen == 4) else if (regnamelen == 4)
switch (regname[0]) {
{ switch (regname[0])
case 'M': {
if (regname[1] == 'A' && regname[2] == 'C') case 'M':
if (regname[3] == 'H') if (regname[1] == 'A' && regname[2] == 'C')
regno = MACH_REGNUM; if (regname[3] == 'H')
else if (regname[3] == 'L') regno = MACH_REGNUM;
regno = MACL_REGNUM; else if (regname[3] == 'L')
break; regno = MACL_REGNUM;
case 'R': break;
if (regname[1] == '0' && regname[2] == '-' && regname[3] == '7') case 'R':
{ if (regname[1] == '0' && regname[2] == '-' && regname[3] == '7')
regno = R0_REGNUM; {
numregs = 8; regno = R0_REGNUM;
} numregs = 8;
} }
}
}
else if (regnamelen == 5) else if (regnamelen == 5)
if (regname[1] == '8' && regname[2] == '-' && regname[3] == '1' {
&& regname[4] =='5') if (regname[1] == '8' && regname[2] == '-' && regname[3] == '1'
{ && regname[4] =='5')
regno = R0_REGNUM + 8; {
numregs = 8; regno = R0_REGNUM + 8;
} numregs = 8;
}
}
if (regno >= 0) if (regno >= 0)
while (numregs-- > 0) while (numregs-- > 0)
val = monitor_supply_register (regno++, val); val = monitor_supply_register (regno++, val);
@ -139,10 +147,17 @@ sh3_load (desc, file, hashmark)
either. So, typing "info reg sp" becomes a "r30". */ either. So, typing "info reg sp" becomes a "r30". */
static char *sh3_regnames[NUM_REGS] = { static char *sh3_regnames[NUM_REGS] = {
"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
"R8", "R9", "R10","R11","R12","R13","R14","R15", "R8", "R9", "R10", "R11","R12", "R13", "R14", "R15",
"PC", "PR", "GBR","VBR","MACH","MACL","SR",NULL, "PC", "PR", "GBR", "VBR","MACH","MACL", "SR",
NULL, NULL, NULL, NULL}; NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
"R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0",
"R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0",
"R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1",
"R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1"
};
/* Define the monitor command strings. Since these are passed directly /* Define the monitor command strings. Since these are passed directly
through to a printf style function, we may include formatting through to a printf style function, we may include formatting
@ -217,9 +232,10 @@ sh3_open (args, from_tty)
{ {
char *serial_port_name = args; char *serial_port_name = args;
char *parallel_port_name = 0; char *parallel_port_name = 0;
if (args) if (args)
{ {
char *cursor = serial_port_name = strsave (args); char *cursor = serial_port_name = strsave (args);
while (*cursor && *cursor != ' ') while (*cursor && *cursor != ' ')
cursor++; cursor++;
@ -239,12 +255,15 @@ sh3_open (args, from_tty)
if (parallel_port_name) if (parallel_port_name)
{ {
parallel = SERIAL_OPEN (parallel_port_name); parallel = SERIAL_OPEN (parallel_port_name);
if (!parallel) if (!parallel)
{ perror_with_name ("Unable to open parallel port.");
perror_with_name ("Unable to open parallel port.");
}
parallel_in_use = 1; parallel_in_use = 1;
} }
/* If we connected successfully, we know the processor is an SH3. */
sh_set_processor_type ("sh3");
} }

Loading…
Cancel
Save