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
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
+the Free Software Foundation; either version 2 of the License, or
+(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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
\f
/* Symbol read-in occurs in two phases:
1. A scan (read_dbx_symtab()) of the entire executable, whose sole
when a symbol in a file for which symbols have not yet been
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 <string.h>
#include "defs.h"
free (info);
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)
printf_filtered ("\n(no debugging symbols found)...");
}
continue;
case 'G':
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,
- VAR_NAMESPACE, LOC_EXTERNAL,
+ VAR_NAMESPACE, LOC_STATIC,
global_psymbols, bufp->n_value);
continue;
val = val >> (bitpos % 8);
#endif
- val &= (1 << bitsize) - 1;
+ if (bitsize < 8 * sizeof (val))
+ val &= (((unsigned long)1) << bitsize) - 1;
return val;
}
{
long oword;
- /* Reject values too big to fit in the field in question.
- Otherwise adjoining fields may be corrupted. */
- if (fieldval & ~((1<<bitsize)-1))
+ /* Reject values too big to fit in the field in question,
+ otherwise adjoining fields may be corrupted. */
+ if ((0 != fieldval & ~((1<<bitsize)-1))
+ && bitsize < 8 * sizeof (fieldval))
error ("Value %d does not fit in %d bits.", fieldval, bitsize);
bcopy (addr, &oword, sizeof oword);
bitpos = sizeof (oword) * 8 - bitpos - bitsize;
#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;
SWAP_TARGET_AND_HOST (&oword, sizeof oword); /* To target format */