Changes from Fred Fish:

* tm-68k.h (FPI_REGNUM):  Add.
* infrun.c (child_create_inferior):  flush stdout and stderr
before forking.
* configure.in:  Handle amigados, amix hosts and targets.
* inflow.c:  Handle TIOCGLTC_BROKEN for Amiga.

From Andreas Schwab:
* values.c (show_convenience):  Use printf_filtered.
* main.c (define_command):  Check result of lookup_command for
exact match.
(echo_command):  Use printf_filtered, and force output out.

* dbxread.c (read_enum_type):  Avoid Modula-2 kludge that breaks C
programs.
* i387-tdep.c (double_to_i387):  Fix typo for double_to_ieee_extended.
* utils.c (_initialize_utils):  If !ISATTY, don't paginate.
This commit is contained in:
John Gilmore 1991-10-15 23:29:34 +00:00
parent 8c8af913b2
commit afe4ca159b
7 changed files with 118 additions and 64 deletions

View File

@ -1,3 +1,23 @@
Tue Oct 15 08:45:12 1991 John Gilmore (gnu at cygnus.com)
Changes from Fred Fish:
* tm-68k.h (FPI_REGNUM): Add.
* infrun.c (child_create_inferior): flush stdout and stderr
before forking.
* configure.in: Handle amigados, amix hosts and targets.
* inflow.c: Handle TIOCGLTC_BROKEN for Amiga.
From Andreas Schwab:
* values.c (show_convenience): Use printf_filtered.
* main.c (define_command): Check result of lookup_command for
exact match.
(echo_command): Use printf_filtered, and force output out.
* dbxread.c (read_enum_type): Avoid Modula-2 kludge that breaks C
programs.
* i387-tdep.c (double_to_i387): Fix typo for double_to_ieee_extended.
* utils.c (_initialize_utils): If !ISATTY, don't paginate.
Mon Oct 14 13:37:50 1991 Roland H. Pesch (pesch at cygnus.com) Mon Oct 14 13:37:50 1991 Roland H. Pesch (pesch at cygnus.com)
* doc/gdb.texinfo: Catch up to changes recorded here in ChangeLog * doc/gdb.texinfo: Catch up to changes recorded here in ChangeLog

View File

@ -16,6 +16,14 @@ m68k)
*) gdb_host=altos ;; *) gdb_host=altos ;;
esac esac
;; ;;
cbm)
case ${host_os} in
amigados) gdb_host=amigados ;;
svr4) gdb_host=amix ;;
esac
;;
hp) hp)
case ${host_os} in case ${host_os} in
hpux) gdb_host=hp300hpux ;; hpux) gdb_host=hp300hpux ;;
@ -127,6 +135,12 @@ m68k)
case "${target_vendor}" in case "${target_vendor}" in
att) gdb_target=3b1 ;; att) gdb_target=3b1 ;;
altos) gdb_target=altos ;; altos) gdb_target=altos ;;
cbm)
case ${target_os} in
amigados) gdb_host=amigados ;;
svr4) gdb_target=amix ;;
esac
;;
hp) hp)
case "${target_os}" in case "${target_os}" in
bsd) gdb_target=hp300bsd ;; bsd) gdb_target=hp300bsd ;;

View File

@ -43,9 +43,21 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define L_INCR 1 #define L_INCR 1
#endif #endif
#include "a.out.gnu.h" #include <obstack.h>
#include "stab.gnu.h" /* We always use GNU stabs, not native, now */ #include <sys/param.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <ctype.h> #include <ctype.h>
#include "symtab.h"
#include "breakpoint.h"
#include "command.h"
#include "target.h"
#include "gdbcore.h" /* for bfd stuff */
#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
#include "symfile.h"
#include "aout64.h"
#include "stab.gnu.h" /* We always use GNU stabs, not native, now */
#ifndef NO_GNU_STABS #ifndef NO_GNU_STABS
/* /*
@ -105,18 +117,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#endif /* NO_GNU_STABS */ #endif /* NO_GNU_STABS */
#include <obstack.h>
#include <sys/param.h>
#include <sys/file.h>
#include <sys/stat.h>
#include "symtab.h"
#include "breakpoint.h"
#include "command.h"
#include "target.h"
#include "gdbcore.h" /* for bfd stuff */
#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
#include "symfile.h"
struct dbx_symfile_info { struct dbx_symfile_info {
asection *text_sect; /* Text section accessor */ asection *text_sect; /* Text section accessor */
int symcount; /* How many symbols are there in the file */ int symcount; /* How many symbols are there in the file */
@ -363,7 +363,13 @@ static int undef_types_allocated, undef_types_length;
static char *symfile_string_table; static char *symfile_string_table;
static int symfile_string_table_size; static int symfile_string_table_size;
/* Setup a define to deal cleanly with the underscore problem */ /* The size of each symbol in the symbol file (in external form).
This is set by dbx_symfile_read when building psymtabs, and by
dbx_psymtab_to_symtab when building symtabs. */
static unsigned symbol_size;
/* Setup a define to deal cleanly with the underscore problem */
#ifdef NAMES_HAVE_UNDERSCORE #ifdef NAMES_HAVE_UNDERSCORE
#define HASH_OFFSET 1 #define HASH_OFFSET 1
@ -1294,6 +1300,9 @@ dbx_symfile_read (sf, addr, mainline)
symfile_bfd = sym_bfd; /* Kludge for SWAP_SYMBOL */ symfile_bfd = sym_bfd; /* Kludge for SWAP_SYMBOL */
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
symbol_size = obj_symbol_entry_size (sym_bfd);
pending_blocks = 0; pending_blocks = 0;
make_cleanup (really_free_pendings, 0); make_cleanup (really_free_pendings, 0);
@ -1433,7 +1442,7 @@ dbx_symfile_init (sf)
} }
/* Buffer for reading the symbol table entries. */ /* Buffer for reading the symbol table entries. */
static struct nlist symbuf[4096]; static struct internal_nlist symbuf[4096];
static int symbuf_idx; static int symbuf_idx;
static int symbuf_end; static int symbuf_end;
@ -1461,15 +1470,15 @@ fill_symbuf ()
perror_with_name ("<symbol file>"); perror_with_name ("<symbol file>");
else if (nbytes == 0) else if (nbytes == 0)
error ("Premature end of file reading symbol table"); error ("Premature end of file reading symbol table");
symbuf_end = nbytes / sizeof (struct nlist); symbuf_end = nbytes / symbol_size;
symbuf_idx = 0; symbuf_idx = 0;
return 1; return 1;
} }
#define SWAP_SYMBOL(symp) \ #define SWAP_SYMBOL(symp) \
{ \ { \
(symp)->n_un.n_strx = bfd_h_get_32(symfile_bfd, \ (symp)->n_strx = bfd_h_get_32(symfile_bfd, \
(unsigned char *)&(symp)->n_un.n_strx); \ (unsigned char *)&(symp)->n_strx); \
(symp)->n_desc = bfd_h_get_16 (symfile_bfd, \ (symp)->n_desc = bfd_h_get_16 (symfile_bfd, \
(unsigned char *)&(symp)->n_desc); \ (unsigned char *)&(symp)->n_desc); \
(symp)->n_value = bfd_h_get_32 (symfile_bfd, \ (symp)->n_value = bfd_h_get_32 (symfile_bfd, \
@ -1492,7 +1501,7 @@ next_symbol_text ()
fill_symbuf (); fill_symbuf ();
symnum++; symnum++;
SWAP_SYMBOL(&symbuf[symbuf_idx]); SWAP_SYMBOL(&symbuf[symbuf_idx]);
return symbuf[symbuf_idx++].n_un.n_strx + stringtab_global; return symbuf[symbuf_idx++].n_strx + stringtab_global;
} }
/* Initializes storage for all of the partial symbols that will be /* Initializes storage for all of the partial symbols that will be
@ -1653,7 +1662,7 @@ read_dbx_symtab (symfile_name, addr,
CORE_ADDR text_addr; CORE_ADDR text_addr;
int text_size; int text_size;
{ {
register struct nlist *bufp; register struct internal_nlist *bufp;
register char *namestring; register char *namestring;
register struct partial_symbol *psym; register struct partial_symbol *psym;
int nsl; int nsl;
@ -1743,11 +1752,11 @@ read_dbx_symtab (symfile_name, addr,
give a fake name, and print a single error message per symbol file read, give a fake name, and print a single error message per symbol file read,
rather than abort the symbol reading or flood the user with messages. */ rather than abort the symbol reading or flood the user with messages. */
#define SET_NAMESTRING()\ #define SET_NAMESTRING()\
if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size) { \ if (bufp->n_strx < 0 || bufp->n_strx >= stringtab_size) { \
complain (&string_table_offset_complaint, symnum); \ complain (&string_table_offset_complaint, symnum); \
namestring = "foo"; \ namestring = "foo"; \
} else \ } else \
namestring = bufp->n_un.n_strx + stringtab namestring = bufp->n_strx + stringtab
/* Add a symbol with an integer value to a psymtab. */ /* Add a symbol with an integer value to a psymtab. */
/* This is a macro unless we're debugging. See above this function. */ /* This is a macro unless we're debugging. See above this function. */
@ -1844,7 +1853,7 @@ read_dbx_symtab (symfile_name, addr,
&& bufp->n_value > pst->textlow) && bufp->n_value > pst->textlow)
{ {
end_psymtab (pst, psymtab_include_list, includes_used, end_psymtab (pst, psymtab_include_list, includes_used,
symnum * sizeof (struct nlist), bufp->n_value, symnum * symbol_size, bufp->n_value,
dependency_list, dependencies_used, dependency_list, dependencies_used,
global_psymbols.next, static_psymbols.next); global_psymbols.next, static_psymbols.next);
pst = (struct partial_symtab *) 0; pst = (struct partial_symtab *) 0;
@ -1949,7 +1958,7 @@ read_dbx_symtab (symfile_name, addr,
if (pst && past_first_source_file) if (pst && past_first_source_file)
{ {
end_psymtab (pst, psymtab_include_list, includes_used, end_psymtab (pst, psymtab_include_list, includes_used,
first_symnum * sizeof (struct nlist), valu, first_symnum * symbol_size, valu,
dependency_list, dependencies_used, dependency_list, dependencies_used,
global_psymbols.next, static_psymbols.next); global_psymbols.next, static_psymbols.next);
pst = (struct partial_symtab *) 0; pst = (struct partial_symtab *) 0;
@ -1961,7 +1970,7 @@ read_dbx_symtab (symfile_name, addr,
pst = start_psymtab (symfile_name, addr, pst = start_psymtab (symfile_name, addr,
namestring, valu, namestring, valu,
first_symnum * sizeof (struct nlist), first_symnum * symbol_size,
global_psymbols.next, static_psymbols.next); global_psymbols.next, static_psymbols.next);
continue; continue;
} }
@ -2334,7 +2343,7 @@ read_dbx_symtab (symfile_name, addr,
if (pst) if (pst)
{ {
end_psymtab (pst, psymtab_include_list, includes_used, end_psymtab (pst, psymtab_include_list, includes_used,
symnum * sizeof (struct nlist), end_of_text_addr, symnum * symbol_size, end_of_text_addr,
dependency_list, dependencies_used, dependency_list, dependencies_used,
global_psymbols.next, static_psymbols.next); global_psymbols.next, static_psymbols.next);
includes_used = 0; includes_used = 0;
@ -2535,7 +2544,7 @@ psymtab_to_symtab_1 (pst, desc, stringtab, stringtab_size, sym_offset)
return; return;
} }
/* Read in all partial symbtabs on which this one is dependent */ /* Read in all partial symtabs on which this one is dependent */
for (i = 0; i < pst->number_of_dependencies; i++) for (i = 0; i < pst->number_of_dependencies; i++)
if (!pst->dependencies[i]->readin) if (!pst->dependencies[i]->readin)
{ {
@ -2681,6 +2690,8 @@ dbx_psymtab_to_symtab (pst)
} }
symfile_bfd = sym_bfd; /* Kludge for SWAP_SYMBOL */ symfile_bfd = sym_bfd; /* Kludge for SWAP_SYMBOL */
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
symbol_size = obj_symbol_entry_size (sym_bfd);
/* FIXME, this uses internal BFD variables. See above in /* FIXME, this uses internal BFD variables. See above in
dbx_symbol_file_open where the macro is defined! */ dbx_symbol_file_open where the macro is defined! */
@ -2807,8 +2818,9 @@ read_ofile_symtab (desc, stringtab, stringtab_size, sym_offset,
int offset; int offset;
{ {
register char *namestring; register char *namestring;
struct nlist *bufp; struct internal_nlist *bufp;
unsigned char type; unsigned char type;
unsigned max_symnum;
subfile_stack = 0; subfile_stack = 0;
stringtab_global = stringtab; stringtab_global = stringtab;
@ -2823,21 +2835,19 @@ read_ofile_symtab (desc, stringtab, stringtab_size, sym_offset,
Detecting this in read_dbx_symtab Detecting this in read_dbx_symtab
would slow down initial readin, so we look for it here instead. */ would slow down initial readin, so we look for it here instead. */
if (sym_offset >= (int)sizeof (struct nlist)) if (sym_offset >= (int)symbol_size)
{ {
lseek (desc, sym_offset - sizeof (struct nlist), L_INCR); lseek (desc, sym_offset - symbol_size, L_INCR);
fill_symbuf (); fill_symbuf ();
bufp = &symbuf[symbuf_idx++]; bufp = &symbuf[symbuf_idx++];
SWAP_SYMBOL (bufp); SWAP_SYMBOL (bufp);
if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size) SET_NAMESTRING ();
error ("Invalid symbol data: bad string table offset: %d",
bufp->n_un.n_strx);
namestring = bufp->n_un.n_strx + stringtab;
processing_gcc_compilation = processing_gcc_compilation =
(bufp->n_type == N_TEXT (bufp->n_type == N_TEXT
&& !strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL)); && !strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL));
/* FIXME!!! Check for gcc2_compiled... */
} }
else else
{ {
@ -2854,8 +2864,10 @@ read_ofile_symtab (desc, stringtab, stringtab_size, sym_offset,
if (bufp->n_type != (unsigned char)N_SO) if (bufp->n_type != (unsigned char)N_SO)
error("First symbol in segment of executable not a source symbol"); error("First symbol in segment of executable not a source symbol");
max_symnum = sym_size / symbol_size;
for (symnum = 0; for (symnum = 0;
symnum < sym_size / sizeof(struct nlist); symnum < max_symnum;
symnum++) symnum++)
{ {
QUIT; /* Allow this to be interruptable */ QUIT; /* Allow this to be interruptable */
@ -2875,10 +2887,7 @@ read_ofile_symtab (desc, stringtab, stringtab_size, sym_offset,
bufp->n_value += offset; bufp->n_value += offset;
type = bufp->n_type; type = bufp->n_type;
if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size) SET_NAMESTRING ();
error ("Invalid symbol data: bad string table offset: %d",
bufp->n_un.n_strx);
namestring = bufp->n_un.n_strx + stringtab;
if (type & N_STAB) if (type & N_STAB)
{ {
@ -2893,22 +2902,17 @@ read_ofile_symtab (desc, stringtab, stringtab_size, sym_offset,
bufp = &symbuf[symbuf_idx]; bufp = &symbuf[symbuf_idx];
if (bufp->n_type == (unsigned char)N_SO) if (bufp->n_type == (unsigned char)N_SO)
{ {
char *namestring2; char *namestring1 = namestring;
SWAP_SYMBOL (bufp); SWAP_SYMBOL (bufp);
bufp->n_value += offset; /* Relocate */ bufp->n_value += offset; /* Relocate */
symbuf_idx++; symbuf_idx++;
symnum++; symnum++;
SET_NAMESTRING ();
if (bufp->n_un.n_strx < 0 process_symbol_pair (N_SO, bufp_n_desc, valu, namestring1,
|| bufp->n_un.n_strx >= stringtab_size)
error ("Invalid symbol data: bad string table offset: %d",
bufp->n_un.n_strx);
namestring2 = bufp->n_un.n_strx + stringtab;
process_symbol_pair (N_SO, bufp_n_desc, valu, namestring,
N_SO, bufp->n_desc, bufp->n_value, N_SO, bufp->n_desc, bufp->n_value,
namestring2); namestring);
} }
else else
process_one_symbol(type, bufp_n_desc, valu, namestring); process_one_symbol(type, bufp_n_desc, valu, namestring);
@ -4953,6 +4957,8 @@ read_enum_type (pp, type)
break; break;
} }
#if 0
/* This screws up perfectly good C programs with enums. FIXME. */
/* Is this Modula-2's BOOLEAN type? Flag it as such if so. */ /* Is this Modula-2's BOOLEAN type? Flag it as such if so. */
if(TYPE_NFIELDS(type) == 2 && if(TYPE_NFIELDS(type) == 2 &&
((!strcmp(TYPE_FIELD_NAME(type,0),"TRUE") && ((!strcmp(TYPE_FIELD_NAME(type,0),"TRUE") &&
@ -4960,6 +4966,7 @@ read_enum_type (pp, type)
(!strcmp(TYPE_FIELD_NAME(type,1),"TRUE") && (!strcmp(TYPE_FIELD_NAME(type,1),"TRUE") &&
!strcmp(TYPE_FIELD_NAME(type,0),"FALSE")))) !strcmp(TYPE_FIELD_NAME(type,0),"FALSE"))))
TYPE_CODE(type) = TYPE_CODE_BOOL; TYPE_CODE(type) = TYPE_CODE_BOOL;
#endif
return type; return type;
} }

View File

@ -60,7 +60,7 @@ void
double_to_i387 (from, to) double_to_i387 (from, to)
char *from, *to; char *from, *to;
{ {
ieee_double_to_extended (&ext_format_i387, (double *)from, to); double_to_ieee_extended (&ext_format_i387, (double *)from, to);
} }
void void

View File

@ -599,7 +599,8 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
/* After the symbol file has been read, print a newline to get us /* After the symbol file has been read, print a newline to get us
beyond the copyright line... But errors should still set off beyond the copyright line... But errors should still set off
the error message with a (single) blank line. */ the error message with a (single) blank line. */
printf_filtered ("\n"); if (!quiet)
printf_filtered ("\n");
error_pre_print = "\n"; error_pre_print = "\n";
if (corearg != NULL) if (corearg != NULL)
@ -714,7 +715,7 @@ execute_command (p, from_tty)
register struct cmd_list_element *c; register struct cmd_list_element *c;
register struct command_line *cmdlines; register struct command_line *cmdlines;
register enum language flang; register enum language flang;
static enum language current = language_unknown; static struct language_defn *saved_language = 0;
static int warned = 0; static int warned = 0;
free_all_values (); free_all_values ();
@ -761,24 +762,28 @@ execute_command (p, from_tty)
(*c->function) (arg, from_tty & caution); (*c->function) (arg, from_tty & caution);
} }
/* Tell the user if the language has changed */ /* Tell the user if the language has changed (except first time). */
if (working_lang != current) if (current_language != saved_language)
{ {
if (language_mode == language_mode_auto) { if (language_mode == language_mode_auto) {
if (current != language_unknown) if (saved_language)
language_info (); language_info ();
} }
current = working_lang; saved_language = current_language;
warned = 0; warned = 0;
} }
/* Warn the user if the working language does not match the /* Warn the user if the working language does not match the
language of the current frame. Only warn the user if we are language of the current frame. Only warn the user if we are
actually running the program, i.e. there is a stack. */ actually running the program, i.e. there is a stack. */
/* FIXME: This should be cacheing the frame and only running when
the frame changes. */
if (target_has_stack) if (target_has_stack)
{ {
flang = get_frame_language(); flang = get_frame_language ();
if(!warned && flang != language_unknown && flang != working_lang) if (!warned
&& flang != language_unknown
&& flang != current_language->la_language)
{ {
printf_filtered ("%s\n", lang_frame_mismatch_warn); printf_filtered ("%s\n", lang_frame_mismatch_warn);
warned = 1; warned = 1;
@ -1491,7 +1496,11 @@ define_command (comname, from_tty)
validate_comname (comname); validate_comname (comname);
/* Look it up, and verify that we got an exact match. */
c = lookup_cmd (&tem, cmdlist, "", -1, 1); c = lookup_cmd (&tem, cmdlist, "", -1, 1);
if (c && 0 != strcmp (comname, c->name))
c = 0;
if (c) if (c)
{ {
if (c->class == class_user || c->class == class_alias) if (c->class == class_user || c->class == class_alias)
@ -1571,8 +1580,8 @@ print_gnu_advertisement()
{ {
printf ("\ printf ("\
GDB is free software and you are welcome to distribute copies of it\n\ GDB is free software and you are welcome to distribute copies of it\n\
under certain conditions; type \"info copying\" to see the conditions.\n\ under certain conditions; type \"show copying\" to see the conditions.\n\
There is absolutely no warranty for GDB; type \"info warranty\" for details.\n\ There is absolutely no warranty for GDB; type \"show warranty\" for details.\n\
"); ");
} }
@ -1763,11 +1772,14 @@ echo_command (text, from_tty)
c = parse_escape (&p); c = parse_escape (&p);
if (c >= 0) if (c >= 0)
fputc (c, stdout); printf_filtered ("%c", c);
} }
else else
fputc (c, stdout); printf_filtered ("%c", c);
} }
/* Force this output to appear now. */
wrap_here ("");
fflush (stdout); fflush (stdout);
} }

View File

@ -255,6 +255,7 @@ extern struct ext_format ext_format_68881;
#define FP0_REGNUM 18 /* Floating point register 0 */ #define FP0_REGNUM 18 /* Floating point register 0 */
#define FPC_REGNUM 26 /* 68881 control register */ #define FPC_REGNUM 26 /* 68881 control register */
#define FPS_REGNUM 27 /* 68881 status register */ #define FPS_REGNUM 27 /* 68881 status register */
#define FPI_REGNUM 28 /* 68881 iaddr register */
#endif /* 68881. */ #endif /* 68881. */
/* 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

View File

@ -493,9 +493,9 @@ show_convenience ()
#endif #endif
varseen = 1; varseen = 1;
} }
printf ("$%s = ", var->name); printf_filtered ("$%s = ", var->name);
value_print (var->value, stdout, 0, Val_pretty_default); value_print (var->value, stdout, 0, Val_pretty_default);
printf ("\n"); printf_filtered ("\n");
} }
if (!varseen) if (!varseen)
printf ("No debugger convenience variables now defined.\n\ printf ("No debugger convenience variables now defined.\n\