Eliminate LOC_EXTERNAL. Improve select_source_symtab. Bug fixes.

This commit is contained in:
John Gilmore 1991-07-19 06:45:19 +00:00
parent 3d6c650189
commit c3a2180180
4 changed files with 21 additions and 28 deletions

View file

@ -78,7 +78,7 @@ core_open (filename, from_tty)
char *filename; char *filename;
int from_tty; int from_tty;
{ {
char *p; const char *p;
int siggy; int siggy;
struct cleanup *old_chain; struct cleanup *old_chain;
char *temp; char *temp;

View file

@ -3,19 +3,19 @@
This file is part of GDB. This file is part of GDB.
GDB is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option) the Free Software Foundation; either version 2 of the License, or
any later version. (at your option) any later version.
GDB is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING. If not, write to along with this program; if not, write to the Free Software
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Symbol read-in occurs in two phases: /* Symbol read-in occurs in two phases:
1. A scan (read_dbx_symtab()) of the entire executable, whose sole 1. A scan (read_dbx_symtab()) of the entire executable, whose sole
@ -28,16 +28,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
when a symbol in a file for which symbols have not yet been when a symbol in a file for which symbols have not yet been
read in is referenced. */ read in is referenced. */
/* There used to be some PROFILE_TYPES code in this file which counted
the number of occurances of various symbols. I'd suggest instead:
nm -ap foo | awk 'print $5' | sort | uniq -c
to print how many of each n_type, or something like
nm -ap foo | awk '$5 == "LSYM" {print $6 $7 $8 $9 $10 $11}' | \
awk 'BEGIN {FS=":"}
{print substr($2,1,1)}' | sort | uniq -c
to print the number of each kind of symbol descriptor (i.e. the letter
after ':'). */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "defs.h" #include "defs.h"
@ -1325,10 +1315,6 @@ dbx_symfile_read (sf, addr, mainline)
free (info); free (info);
sf->sym_private = 0; /* Zap pointer to our (now gone) info struct */ sf->sym_private = 0; /* Zap pointer to our (now gone) info struct */
/* Call to select_source_symtab used to be here; it was using too
much time. I'll make sure that list_sources can handle the lack
of current_source_symtab */
if (!partial_symtab_list) if (!partial_symtab_list)
printf_filtered ("\n(no debugging symbols found)..."); printf_filtered ("\n(no debugging symbols found)...");
} }
@ -2200,8 +2186,10 @@ read_dbx_symtab (symfile_name, addr,
continue; continue;
case 'G': case 'G':
bufp->n_value += addr; /* Relocate */ bufp->n_value += addr; /* Relocate */
/* The addresses in these entries are reported to be
wrong. See the code that reads 'G's for symtabs. */
ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring, ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring,
VAR_NAMESPACE, LOC_EXTERNAL, VAR_NAMESPACE, LOC_STATIC,
global_psymbols, bufp->n_value); global_psymbols, bufp->n_value);
continue; continue;

View file

@ -667,7 +667,6 @@ variable: name_not_typename
case LOC_TYPEDEF: case LOC_TYPEDEF:
case LOC_LABEL: case LOC_LABEL:
case LOC_BLOCK: case LOC_BLOCK:
case LOC_EXTERNAL:
case LOC_CONST_BYTES: case LOC_CONST_BYTES:
/* In this case the expression can /* In this case the expression can

View file

@ -1352,7 +1352,8 @@ unpack_field_as_long (type, valaddr, fieldno)
val = val >> (bitpos % 8); val = val >> (bitpos % 8);
#endif #endif
val &= (1 << bitsize) - 1; if (bitsize < 8 * sizeof (val))
val &= (((unsigned long)1) << bitsize) - 1;
return val; return val;
} }
@ -1369,9 +1370,10 @@ modify_field (addr, fieldval, bitpos, bitsize)
{ {
long oword; long oword;
/* Reject values too big to fit in the field in question. /* Reject values too big to fit in the field in question,
Otherwise adjoining fields may be corrupted. */ otherwise adjoining fields may be corrupted. */
if (fieldval & ~((1<<bitsize)-1)) if ((0 != fieldval & ~((1<<bitsize)-1))
&& bitsize < 8 * sizeof (fieldval))
error ("Value %d does not fit in %d bits.", fieldval, bitsize); error ("Value %d does not fit in %d bits.", fieldval, bitsize);
bcopy (addr, &oword, sizeof oword); bcopy (addr, &oword, sizeof oword);
@ -1382,7 +1384,11 @@ modify_field (addr, fieldval, bitpos, bitsize)
bitpos = sizeof (oword) * 8 - bitpos - bitsize; bitpos = sizeof (oword) * 8 - bitpos - bitsize;
#endif #endif
oword &= ~(((1 << bitsize) - 1) << bitpos); /* Mask out old value, while avoiding shifts >= longword size */
if (bitsize < 8 * sizeof (oword))
oword &= ~(((((unsigned long)1) << bitsize) - 1) << bitpos);
else
oword &= ~((-1) << bitpos);
oword |= fieldval << bitpos; oword |= fieldval << bitpos;
SWAP_TARGET_AND_HOST (&oword, sizeof oword); /* To target format */ SWAP_TARGET_AND_HOST (&oword, sizeof oword); /* To target format */