* buildsym.c (patch_subfile_name): Update last_source_file

with the real source file name.
	* dbxread.c (end_psymtab):  Handle static functions in the
	SOFUN_ADDRESS_MAYBE_MISSING case by passing pst->filename
	to lookup_minimal_symbol.
	(process_one_symbol):  Ignore extra outermost context from
	SunPRO cc and acc.
	* stabsread.c (define_symbol):  Do not complain for SunPRO
	static variable encoding if STATIC_TRANSFORM_NAME is defined.
	* sparc-tdep.c, config/sparc/tm-sun4sol2.h
	(sunpro_static_transform_name):  Renamed from
	solaris_static_transform_name.
	* config/sparc/tm-sun4os4.h (STATIC_TRANSFORM_NAME):
	Define to sunpro_static_transform_name for acc 3.0 compiled
	executables.
	* procfs.c, config/alpha/nm-osf2.h (PROCFS_DONT_TRACE_FAULTS):
	Renamed from PROCFS_DONT_TRACE_IFAULT, don't trace any faults
	if defined.
	* procfs.c (info_proc_siginfo):  Cast sip->si_addr to
	`unsigned long' and use `lx' format for printing it.
This commit is contained in:
Peter Schauer 1995-03-25 09:23:10 +00:00
parent 62f2c80802
commit b9e585030c
6 changed files with 147 additions and 80 deletions

View File

@ -1,3 +1,69 @@
Sat Mar 25 01:16:10 1995 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* buildsym.c (patch_subfile_name): Update last_source_file
with the real source file name.
* dbxread.c (end_psymtab): Handle static functions in the
SOFUN_ADDRESS_MAYBE_MISSING case by passing pst->filename
to lookup_minimal_symbol.
(process_one_symbol): Ignore extra outermost context from
SunPRO cc and acc.
* stabsread.c (define_symbol): Do not complain for SunPRO
static variable encoding if STATIC_TRANSFORM_NAME is defined.
* sparc-tdep.c, config/sparc/tm-sun4sol2.h
(sunpro_static_transform_name): Renamed from
solaris_static_transform_name.
* config/sparc/tm-sun4os4.h (STATIC_TRANSFORM_NAME):
Define to sunpro_static_transform_name for acc 3.0 compiled
executables.
* procfs.c, config/alpha/nm-osf2.h (PROCFS_DONT_TRACE_FAULTS):
Renamed from PROCFS_DONT_TRACE_IFAULT, don't trace any faults
if defined.
* procfs.c (info_proc_siginfo): Cast sip->si_addr to
`unsigned long' and use `lx' format for printing it.
Fri Mar 24 15:45:42 1995 Stu Grossman (grossman@cygnus.com)
* configure.in: Move test for m68*-est-* before m68*-*-coff*.
* findvar.c: Move default def of CANNOT_STORE_REGISTER closer to
the beginning of the code.
* (write_register_gen): New routine. Analogous to
read_register_gen.
* (write_register_bytes): Another rewrite! Make it smarter about
not updating regs with the same value.
* monitor.c (printf_monitor readchar): Use stderr instead of
stdout to output debug info. Also cleanup readchar a little.
* (expect): Make sure that excessive responses are null
terminated.
* (monitor_open): Check for magic number in monitor_ops struct.
Allow multiple commands as init strings. Also, clear all
breakpoints.
* (monitor_resume monitor_wait): Send a command to dump all the
regs for those targets which don't do so when waking up after a
continue command.
* (monitor_wait): Handle excessive response output better.
* (monitor_write_memory): Use block fill, word, and long word
commands (if they exist) to write memory more efficiently.
* General cleanups to use flag bits instead of individual flag
words in monitor_ops struct.
* (monitor_command): Return output from command.
* (monitor_load_srec): Allocate buffer only once. Use alloca.
Wait for load response string instead of using a timeout to start
sending S-records. Fix bug where value of srec_frame shrinks. If
hashmark is set, print `-' for retransmissions. General cleanups.
* (monitor_make_srec): Get rid of S-record default type kludge.
* monitor.h: Use seperate struct for memory and register
read/write commands. Memory commands can come in byte, word,
long, and longlong forms.
* (monitor_ops): Change lots of fields. Generalize some stuff.
Put all flags into flags word. Allow init to be a list of commands.
Add command for clearing all breakpoints, block fill, dumping all
registers.
* remote-est.c: Rewrite to use new monitor conventions.
* config/m68k/est.mt (TDEPFILES): Add monitor.o.
* config/m68k/tm-est.h: Set NUM_REGS to 18.
* testsuite/gdb.base/break.exp: Lots of cleanups. Use gdb_test
more thoroughly.
Thu Mar 23 23:20:00 1995 Jeff Law (law@snake.cs.utah.edu) Thu Mar 23 23:20:00 1995 Jeff Law (law@snake.cs.utah.edu)
* somsolib.c (som_solib_add): Handle case where a shared library * somsolib.c (som_solib_add): Handle case where a shared library

View File

@ -1,5 +1,5 @@
/* Support routines for building symbol tables in GDB's internal format. /* Support routines for building symbol tables in GDB's internal format.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1995
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -526,6 +526,7 @@ patch_subfile_names (subfile, name)
{ {
subfile->dirname = subfile->name; subfile->dirname = subfile->name;
subfile->name = savestring (name, strlen (name)); subfile->name = savestring (name, strlen (name));
last_source_file = name;
/* Default the source language to whatever can be deduced from /* Default the source language to whatever can be deduced from
the filename. If nothing can be deduced (such as for a C/C++ the filename. If nothing can be deduced (such as for a C/C++

View File

@ -1,5 +1,5 @@
/* Read dbx symbol tables and convert to internal format, for GDB. /* Read dbx symbol tables and convert to internal format, for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -961,12 +961,8 @@ read_dbx_dynamic_symtab (section_offsets, objfile)
if (sym->flags & BSF_GLOBAL) if (sym->flags & BSF_GLOBAL)
type |= N_EXT; type |= N_EXT;
name = (char *) bfd_asymbol_name (sym); record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
record_minimal_symbol type, objfile);
(obsavestring (name, strlen (name), &objfile -> symbol_obstack),
sym_value,
type,
objfile);
} }
} }
@ -1018,7 +1014,7 @@ read_dbx_dynamic_symtab (section_offsets, objfile)
continue; continue;
} }
name = bfd_asymbol_name (*rel->sym_ptr_ptr); name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
prim_record_minimal_symbol prim_record_minimal_symbol
(obsavestring (name, strlen (name), &objfile -> symbol_obstack), (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
address, address,
@ -1240,29 +1236,21 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst); LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
pst->texthigh = capping_text; pst->texthigh = capping_text;
#ifdef N_SO_ADDRESS_MAYBE_MISSING #ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Under Solaris, the N_SO symbols always have a value of 0, /* Under Solaris, the N_SO symbols always have a value of 0,
instead of the usual address of the .o file. Therefore, instead of the usual address of the .o file. Therefore,
we have to do some tricks to fill in texthigh and textlow. we have to do some tricks to fill in texthigh and textlow.
The first trick is in partial-stab.h: if we see a static The first trick is in partial-stab.h: if we see a static
or global function, and the textlow for the current pst or global function, and the textlow for the current pst
is still 0, then we use that function's address for is still 0, then we use that function's address for
the textlow of the pst. the textlow of the pst. */
Now, to fill in texthigh, we remember the last function seen /* Now, to fill in texthigh, we remember the last function seen
in the .o file (also in partial-stab.h). Also, there's a hack in in the .o file (also in partial-stab.h). Also, there's a hack in
bfd/elf.c and gdb/elfread.c to pass the ELF st_size field bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
to here via the misc_info field. Therefore, we can fill in to here via the misc_info field. Therefore, we can fill in
a reliable texthigh by taking the address plus size of the a reliable texthigh by taking the address plus size of the
last function in the file. last function in the file. */
Unfortunately, that does not cover the case where the last function
in the file is static. See the paragraph below for more comments
on this situation.
Finally, if we have a valid textlow for the current file, we run
down the partial_symtab_list filling in previous texthighs that
are still unknown. */
if (pst->texthigh == 0 && last_function_name) { if (pst->texthigh == 0 && last_function_name) {
char *p; char *p;
@ -1277,31 +1265,12 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
strncpy (p, last_function_name, n); strncpy (p, last_function_name, n);
p[n] = 0; p[n] = 0;
minsym = lookup_minimal_symbol (p, objfile); minsym = lookup_minimal_symbol (p, pst->filename, objfile);
if (minsym) { if (minsym)
pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) + pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
(long) MSYMBOL_INFO (minsym); (long) MSYMBOL_INFO (minsym);
} else {
/* This file ends with a static function, and it's
difficult to imagine how hard it would be to track down
the elf symbol. Luckily, most of the time no one will notice,
since the next file will likely be compiled with -g, so
the code below will copy the first fuction's start address
back to our texthigh variable. (Also, if this file is the
last one in a dynamically linked program, texthigh already
has the right value.) If the next file isn't compiled
with -g, then the last function in this file winds up owning
all of the text space up to the next -g file, or the end (minus
shared libraries). This only matters for single stepping,
and even then it will still work, except that it will single
step through all of the covered functions, instead of setting
breakpoints around them as it usualy does. This makes it
pretty slow, but at least it doesn't fail.
We can fix this with a fairly big change to bfd, but we need
to coordinate better with Cygnus if we want to do that. FIXME. */
}
last_function_name = NULL; last_function_name = NULL;
} }
@ -1309,7 +1278,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
if (pst->textlow == 0) if (pst->textlow == 0)
/* This loses if the text section really starts at address zero /* This loses if the text section really starts at address zero
(generally true when we are debugging a .o file, for example). (generally true when we are debugging a .o file, for example).
That is why this whole thing is inside N_SO_ADDRESS_MAYBE_MISSING. */ That is why this whole thing is inside SOFUN_ADDRESS_MAYBE_MISSING. */
pst->textlow = pst->texthigh; pst->textlow = pst->texthigh;
/* If we know our own starting text address, then walk through all other /* If we know our own starting text address, then walk through all other
@ -1331,7 +1300,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
} }
/* End of kludge for patching Solaris textlow and texthigh. */ /* End of kludge for patching Solaris textlow and texthigh. */
#endif /* N_SO_ADDRESS_MAYBE_MISSING. */ #endif /* SOFUN_ADDRESS_MAYBE_MISSING. */
pst->n_global_syms = pst->n_global_syms =
objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset); objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
@ -1762,6 +1731,10 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
/* This "symbol" just indicates the start of an inner lexical /* This "symbol" just indicates the start of an inner lexical
context within a function. */ context within a function. */
/* Ignore extra outermost context from SunPRO cc and acc. */
if (n_opt_found && desc == 1)
break;
#if defined(BLOCK_ADDRESS_ABSOLUTE) #if defined(BLOCK_ADDRESS_ABSOLUTE)
/* Relocate for dynamic loading (?). */ /* Relocate for dynamic loading (?). */
valu += function_start_offset; valu += function_start_offset;
@ -1789,6 +1762,10 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
/* This "symbol" just indicates the end of an inner lexical /* This "symbol" just indicates the end of an inner lexical
context that was started with N_LBRAC. */ context that was started with N_LBRAC. */
/* Ignore extra outermost context from SunPRO cc and acc. */
if (n_opt_found && desc == 1)
break;
#if defined(BLOCK_ADDRESS_ABSOLUTE) #if defined(BLOCK_ADDRESS_ABSOLUTE)
/* Relocate for dynamic loading (?). */ /* Relocate for dynamic loading (?). */
valu += function_start_offset; valu += function_start_offset;
@ -2070,6 +2047,30 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
case 'F': case 'F':
function_stab_type = type; function_stab_type = type;
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Deal with the SunPRO 3.0 compiler which omits the address
from N_FUN symbols. */
if (type == N_FUN && valu == 0)
{
struct minimal_symbol *msym;
char *p;
int n;
p = strchr (name, ':');
if (p == NULL)
p = name;
n = p - name;
p = alloca (n + 1);
strncpy (p, name, n);
p[n] = 0;
msym = lookup_minimal_symbol (p, last_source_file,
objfile);
if (msym)
valu = SYMBOL_VALUE_ADDRESS (msym);
}
#endif
#ifdef SUN_FIXED_LBRAC_BUG #ifdef SUN_FIXED_LBRAC_BUG
/* The Sun acc compiler, under SunOS4, puts out /* The Sun acc compiler, under SunOS4, puts out
functions with N_GSYM or N_STSYM. The problem is functions with N_GSYM or N_STSYM. The problem is
@ -2086,16 +2087,18 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
previous function. This means that we can use the previous function. This means that we can use the
minimal symbol table to get the address. */ minimal symbol table to get the address. */
/* On solaris up to 2.2, the N_FUN stab gets relocated. /* Starting with release 3.0, the Sun acc compiler,
On Solaris 2.3, ld no longer relocates stabs (which under SunOS4, puts out functions with N_FUN and a value
is good), and the N_FUN's value is now always zero. of zero. This gets relocated to the start of the text
The following code can't deal with this, because segment of the module, which is no good either.
last_pc_address depends on getting the address from a Under SunOS4 we can deal with this as N_SLINE and N_SO
N_SLINE or some such and in Solaris those are function entries contain valid absolute addresses.
relative. Best fix is probably to create a Ttext.text symbol Release 3.0 acc also puts out N_OPT entries, which makes
and handle this like Ddata.data and so on. */ it possible to discern acc from cc or gcc. */
if (type == N_GSYM || type == N_STSYM) if (type == N_GSYM || type == N_STSYM
|| (type == N_FUN
&& n_opt_found && !block_address_function_relative))
{ {
struct minimal_symbol *m; struct minimal_symbol *m;
int l = colon_pos - name; int l = colon_pos - name;

View File

@ -1460,12 +1460,8 @@ create_procinfo (pid)
prfillset (&pi->prrun.pr_fault); prfillset (&pi->prrun.pr_fault);
prdelset (&pi->prrun.pr_fault, FLTPAGE); prdelset (&pi->prrun.pr_fault, FLTPAGE);
#ifdef PROCFS_DONT_TRACE_IFAULT #ifdef PROCFS_DONT_TRACE_FAULTS
/* Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable' premptyset (&pi->prrun.pr_fault);
fault from which we cannot continue (except by disabling the
tracing). We rely on the delivery of a SIGTRAP signal (which is traced)
for the other T_IFAULT faults if tracing them is disabled. */
prdelset (&pi->prrun.pr_fault, T_IFAULT);
#endif #endif
if (ioctl (pi->fd, PIOCWSTOP, &pi->prstatus) < 0) if (ioctl (pi->fd, PIOCWSTOP, &pi->prstatus) < 0)
@ -2067,12 +2063,8 @@ do_attach (pid)
prfillset (&pi->prrun.pr_fault); prfillset (&pi->prrun.pr_fault);
prdelset (&pi->prrun.pr_fault, FLTPAGE); prdelset (&pi->prrun.pr_fault, FLTPAGE);
#ifdef PROCFS_DONT_TRACE_IFAULT #ifdef PROCFS_DONT_TRACE_FAULTS
/* Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable' premptyset (&pi->prrun.pr_fault);
fault from which we cannot continue (except by disabling the
tracing). We rely on the delivery of a SIGTRAP signal (which is traced)
for the other T_IFAULT faults if tracing them is disabled. */
prdelset (&pi->prrun.pr_fault, T_IFAULT);
#endif #endif
if (ioctl (pi->fd, PIOCSFAULT, &pi->prrun.pr_fault)) if (ioctl (pi->fd, PIOCSFAULT, &pi->prrun.pr_fault))
@ -2997,7 +2989,8 @@ info_proc_siginfo (pip, summary)
(sip -> si_signo == SIGSEGV) || (sip -> si_signo == SIGSEGV) ||
(sip -> si_signo == SIGBUS)) (sip -> si_signo == SIGBUS))
{ {
printf_filtered ("addr=%#x ", sip -> si_addr); printf_filtered ("addr=%#lx ",
(unsigned long) sip -> si_addr);
} }
else if ((sip -> si_signo == SIGCHLD)) else if ((sip -> si_signo == SIGCHLD))
{ {
@ -3036,13 +3029,15 @@ info_proc_siginfo (pip, summary)
if ((sip -> si_signo == SIGILL) || if ((sip -> si_signo == SIGILL) ||
(sip -> si_signo == SIGFPE)) (sip -> si_signo == SIGFPE))
{ {
printf_filtered ("\t%-16#x %s.\n", sip -> si_addr, printf_filtered ("\t%#-16lx %s.\n",
(unsigned long) sip -> si_addr,
"Address of faulting instruction"); "Address of faulting instruction");
} }
else if ((sip -> si_signo == SIGSEGV) || else if ((sip -> si_signo == SIGSEGV) ||
(sip -> si_signo == SIGBUS)) (sip -> si_signo == SIGBUS))
{ {
printf_filtered ("\t%-16#x %s.\n", sip -> si_addr, printf_filtered ("\t%#-16lx %s.\n",
(unsigned long) sip -> si_addr,
"Address of faulting memory reference"); "Address of faulting memory reference");
} }
else if ((sip -> si_signo == SIGCHLD)) else if ((sip -> si_signo == SIGCHLD))

View File

@ -279,8 +279,13 @@ CORE_ADDR
sparc_extract_struct_value_address (regbuf) sparc_extract_struct_value_address (regbuf)
char regbuf[REGISTER_BYTES]; char regbuf[REGISTER_BYTES];
{ {
#ifdef GDB_TARGET_IS_SPARC64
return extract_address (regbuf + REGISTER_BYTE (O0_REGNUM),
REGISTER_RAW_SIZE (O0_REGNUM));
#else
return read_memory_integer (((int *)(regbuf)) [SP_REGNUM] + (16 * SPARC_INTREG_SIZE), return read_memory_integer (((int *)(regbuf)) [SP_REGNUM] + (16 * SPARC_INTREG_SIZE),
TARGET_PTR_BIT / TARGET_CHAR_BIT); TARGET_PTR_BIT / TARGET_CHAR_BIT);
#endif
} }
/* Find the pc saved in frame FRAME. */ /* Find the pc saved in frame FRAME. */
@ -1272,7 +1277,7 @@ get_longjmp_target (pc)
related to C++ mangling, it is done for C too. */ related to C++ mangling, it is done for C too. */
char * char *
solaris_static_transform_name (name) sunpro_static_transform_name (name)
char *name; char *name;
{ {
char *p; char *p;
@ -1295,20 +1300,11 @@ solaris_static_transform_name (name)
#ifdef GDB_TARGET_IS_SPARC64 #ifdef GDB_TARGET_IS_SPARC64
CORE_ADDR
sparc64_extract_struct_value_address (regbuf)
char regbuf[REGISTER_BYTES];
{
CORE_ADDR addr;
/* FIXME: We assume a non-leaf function. */
addr = read_register (I0_REGNUM);
return addr;
}
/* Utilities for printing registers. /* Utilities for printing registers.
Page numbers refer to the SPARC Architecture Manual. */ Page numbers refer to the SPARC Architecture Manual. */
static void dump_ccreg PARAMS ((char *, int));
static void static void
dump_ccreg (reg, val) dump_ccreg (reg, val)
char *reg; char *reg;

View File

@ -593,6 +593,12 @@ define_symbol (valu, string, desc, type, objfile)
/* This was an anonymous type that was never fixed up. */ /* This was an anonymous type that was never fixed up. */
goto normal; goto normal;
#ifdef STATIC_TRANSFORM_NAME
case 'X':
/* SunPRO (3.0 at least) static variable encoding. */
goto normal;
#endif
default: default:
complain (&unrecognized_cplus_name_complaint, string); complain (&unrecognized_cplus_name_complaint, string);
goto normal; /* Do *something* with it */ goto normal; /* Do *something* with it */