* Makefile.in configure configure.in: Remove ENABLE_CLIBS,

ENABLE_OBS, and THREAD_DB_OBS.  These are consolidated into LIBS
	and CONFIG_OBS.
	* configure configure.in:  Clean up test cases around thread support.
start-sanitize-v850
	* configure.tgt (v850-*-*):  Include v850ice.o and v850.lib if
	host is Windows.
end-sanitize-v850
	* c-valprint.c ch-valprint.c cp-valprint.c eval.c expprint.c
	printcmd.c valops.c value.h values.c:  Add bfd_section arg to
	value_at and value_at_lazy.
	* coffread.c dbxread.c elfread.c mdebugread.c minsyms.c symtab.h:
	Add bfd_section arg to prim_record_minimal_symbol_and_info.
	* corefile.c gdbcore.h printcmd.c valops.c:  Use read_memory_section
	instead of read_memory.  It takes a bfd_section arg.
	* coffread.c dbxread.c elfread.c gdb-stabs.h objfiles.h:  Remove
	unnecessary cast for assignment of struct dbx_symfile_info.
	Struct objfile now uses a real pointer instead of PTR for this
	element.
	* dbxread.c (dbx_symfile_init): Stash bfd section pointers for
	text, data and bss into dbx_symfile_info.
	* exec.c (xfer_memory):  Handle transfers for user-specified
	sections.
	* findvar.c (read_var_value locate_var_value):  Copy bfd section
	from the symbol to the value.
	* gdb-stabs.h:  Add section pointers for text, data and bss
	sections.
	* maint.c (translate address command):  Add test code for overlay
	address translation.
	* printcmd.c (do_examine do_one_display):  Now takes a bfd section
	arg.
	* (print_formatted x_command):  Record current section along with
	current address for repeated commands.
	* sparc-nat.c (fetch_inferior_registers):  Change
	target_xfer_memory to target_{read write}_memory to allow changes
	to target_xfer_memory interface for section info.
	* symmisc.c (dump_msymbols print_symbol):  Print section
	assocaited with symbol.
	* symtab.c (fixup_symbol_section):  New routine to
	add section info to symbols returned by lookup_symbol.
	* symtab.h (struct general_symbol_info):  Add bfd section to
	symbols.
	* target.c target.h (target_xfer_memory):  Add bfd section to
	args.
	* (target_read_memory_section):  New routine to read data from a
	specific section.
	* (target_memory_bfd_section):  New global variable to pass bfd
	section in to targets.
	* valarith.c (value_add value_addr value_array):  Preserve bfd
	section when computing new value.
	* value.h (struct value):  Add bfd section to values.
	* values.c (allocate_value value_copy):  Initialize/preserve bfd
	section.
	* (unpack_double):  Clean up _MSC_VER conditionals to remove
	duplicate code.
start-sanitize-v850
	* v850ice.c:  New module to support communication with NEC's
	PC-based ICE.
	* config/v850/tm-v850.h (REGISTER_NAMES):  Replace sp, gp, fp, and
	ep names with rxx names.  sp and fp are renamed via a different
	mechanism.
end-sanitize-v850
This commit is contained in:
Stu Grossman 1997-01-04 00:33:01 +00:00
parent 6c310da826
commit 4c681116af
6 changed files with 105 additions and 25 deletions

View File

@ -23,10 +23,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define NUM_REGS 65
#define REGISTER_NAMES \
{ "r0", "r1", "r2", "sp", "gp", "r5", "r6", "r7", \
{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
"r24", "r25", "r26", "r27", "r28", "fp", "ep", "r31", \
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \
\
"eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7", \
"sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15", \

View File

@ -69,9 +69,15 @@ struct dbx_symfile_info {
struct header_file *header_files;
int n_header_files;
int n_allocated_header_files;
/* Pointers to BFD sections. These are used to speed up the building of
minimal symbols. */
asection *text_section;
asection *data_section;
asection *bss_section;
};
#define DBX_SYMFILE_INFO(o) ((struct dbx_symfile_info *)((o)->sym_stab_info))
#define DBX_SYMFILE_INFO(o) ((o)->sym_stab_info)
#define DBX_TEXT_ADDR(o) (DBX_SYMFILE_INFO(o)->text_addr)
#define DBX_TEXT_SIZE(o) (DBX_SYMFILE_INFO(o)->text_size)
#define DBX_SYMCOUNT(o) (DBX_SYMFILE_INFO(o)->symcount)
@ -79,5 +85,8 @@ struct dbx_symfile_info {
#define DBX_STRINGTAB_SIZE(o) (DBX_SYMFILE_INFO(o)->stringtab_size)
#define DBX_SYMTAB_OFFSET(o) (DBX_SYMFILE_INFO(o)->symtab_offset)
#define DBX_SYMBOL_SIZE(o) (DBX_SYMFILE_INFO(o)->symbol_size)
#define DBX_TEXT_SECTION(o) (DBX_SYMFILE_INFO(o)->text_section)
#define DBX_DATA_SECTION(o) (DBX_SYMFILE_INFO(o)->data_section)
#define DBX_BSS_SECTION(o) (DBX_SYMFILE_INFO(o)->bss_section)
#endif /* GDBSTABS_H */

View File

@ -278,6 +278,47 @@ maintenance_print_command (arg, from_tty)
help_list (maintenanceprintlist, "maintenance print ", -1, gdb_stdout);
}
/* The "maintenance translate-address" command converts a section and address
to a symbol. This can be called in two ways:
maintenance translate-address <secname> <addr>
or maintenance translate-address <addr>
*/
static void
maintenance_translate_address (arg, from_tty)
char *arg;
int from_tty;
{
CORE_ADDR address;
asection *sect;
char *p;
struct symbol *sym;
sect = NULL;
p = arg;
if (!isdigit (p))
{ /* See if we have a valid section name */
while (*p && !isspace (*p)) /* Find end of section name */
p++;
if (*p == '\000') /* End of command? */
error ("Need to specify <section-name> and <address>");
*p++ = '\000';
while (isspace (*p)) p++; /* Skip whitespace */
sect = bfd_get_section_by_name (exec_bfd, arg);
if (!sect)
error ("Unknown section %s.", arg);
}
address = parse_and_eval_address (p);
return;
/* sym = find_pc_function_section (address, sect);*/
printf_unfiltered ("%s+%u\n", SYMBOL_SOURCE_NAME (sym), address - SYMBOL_VALUE_ADDRESS (sym));
}
#endif /* MAINTENANCE_CMDS */
void
@ -370,6 +411,10 @@ If a SOURCE file is specified, dump only that file's partial symbols.",
"Check consistency of psymtabs and symtabs.",
&maintenancelist);
add_cmd ("translate-address", class_maintenance, maintenance_translate_address,
"Translate a section name and address to a symbol.",
&maintenancelist);
add_show_from_set (
add_set_cmd ("watchdog", class_maintenance, var_zinteger, (char *)&watchdog,
"Set watchdog timer.\n\

View File

@ -316,7 +316,7 @@ struct objfile
/* Information about stabs. Will be filled in with a dbx_symfile_info
struct by those readers that need it. */
PTR sym_stab_info;
struct dbx_symfile_info *sym_stab_info;
/* Hook for information for use by the symbol reader (currently used
for information shared by sym_init and sym_read). It is

View File

@ -116,9 +116,9 @@ fetch_inferior_registers (regno)
all (16 ptrace calls!) if we really need them. */
if (regno == -1)
{
target_xfer_memory (*(CORE_ADDR*)&registers[REGISTER_BYTE (SP_REGNUM)],
target_read_memory (*(CORE_ADDR*)&registers[REGISTER_BYTE (SP_REGNUM)],
&registers[REGISTER_BYTE (L0_REGNUM)],
16*REGISTER_RAW_SIZE (L0_REGNUM), 0);
16*REGISTER_RAW_SIZE (L0_REGNUM));
for (i = L0_REGNUM; i <= I7_REGNUM; i++)
register_valid[i] = 1;
}
@ -128,8 +128,8 @@ fetch_inferior_registers (regno)
i = REGISTER_BYTE (regno);
if (register_valid[regno])
printf_unfiltered("register %d valid and read\n", regno);
target_xfer_memory (sp + i - REGISTER_BYTE (L0_REGNUM),
&registers[i], REGISTER_RAW_SIZE (regno), 0);
target_read_memory (sp + i - REGISTER_BYTE (L0_REGNUM),
&registers[i], REGISTER_RAW_SIZE (regno));
register_valid[regno] = 1;
}
}
@ -192,16 +192,16 @@ store_inferior_registers (regno)
if (regno < 0 || regno == SP_REGNUM)
{
if (!register_valid[L0_REGNUM+5]) abort();
target_xfer_memory (sp,
&registers[REGISTER_BYTE (L0_REGNUM)],
16*REGISTER_RAW_SIZE (L0_REGNUM), 1);
target_write_memory (sp,
&registers[REGISTER_BYTE (L0_REGNUM)],
16*REGISTER_RAW_SIZE (L0_REGNUM));
}
else
{
if (!register_valid[regno]) abort();
target_xfer_memory (sp + REGISTER_BYTE (regno) - REGISTER_BYTE (L0_REGNUM),
&registers[REGISTER_BYTE (regno)],
REGISTER_RAW_SIZE (regno), 1);
target_write_memory (sp + REGISTER_BYTE (regno) - REGISTER_BYTE (L0_REGNUM),
&registers[REGISTER_BYTE (regno)],
REGISTER_RAW_SIZE (regno));
}
}

View File

@ -459,6 +459,30 @@ find_pc_psymbol (psymtab, pc)
return best;
}
/* Debug symbols usually don't have section information. We need to dig that
out of the minimal symbols and stash that in the debug symbol. */
static
struct symbol * fixup_symbol_section PARAMS ((struct symbol *sym,
struct objfile *objfile));
static struct symbol *
fixup_symbol_section (sym, objfile)
struct symbol *sym;
struct objfile *objfile;
{
struct minimal_symbol *msym;
if (SYMBOL_BFD_SECTION (sym))
return sym;
msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, objfile);
if (msym)
SYMBOL_BFD_SECTION (sym) = SYMBOL_BFD_SECTION (msym);
return sym;
}
/* Find the definition for a specified symbol name NAME
in namespace NAMESPACE, visible from lexical block BLOCK.
@ -493,7 +517,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
register struct symtab *s = NULL;
register struct partial_symtab *ps;
struct blockvector *bv;
register struct objfile *objfile;
register struct objfile *objfile = NULL;
register struct block *b;
register struct minimal_symbol *msymbol;
@ -521,7 +545,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
*symtab = s;
}
return (sym);
return fixup_symbol_section (sym, objfile);
}
block = BLOCK_SUPERBLOCK (block);
}
@ -550,7 +574,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
block_found = b;
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
}
}
@ -569,7 +593,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
*is_a_field_of_this = 1;
if (symtab != NULL)
*symtab = NULL;
return 0;
return NULL;
}
}
@ -586,7 +610,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
block_found = block;
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
}
@ -630,7 +654,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
else if (MSYMBOL_TYPE (msymbol) != mst_text
&& MSYMBOL_TYPE (msymbol) != mst_file_text
@ -638,8 +662,10 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
{
/* This is a mangled variable, look it up by its
mangled name. */
return lookup_symbol (SYMBOL_NAME (msymbol), block,
namespace, is_a_field_of_this, symtab);
return fixup_symbol_section
(lookup_symbol (SYMBOL_NAME (msymbol), block,
namespace, is_a_field_of_this, symtab),
NULL);
}
/* There are no debug symbols for this file, or we are looking
for an unmangled variable.
@ -659,7 +685,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
error ("Internal: global symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
}
@ -677,7 +703,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
block_found = block;
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
}
@ -693,7 +719,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
error ("Internal: static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
if (symtab != NULL)
*symtab = s;
return sym;
return fixup_symbol_section (sym, objfile);
}
}