diff options
Diffstat (limited to 'contrib/binutils/bfd/syms.c')
-rw-r--r-- | contrib/binutils/bfd/syms.c | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/contrib/binutils/bfd/syms.c b/contrib/binutils/bfd/syms.c index c07f48b..0ff9416 100644 --- a/contrib/binutils/bfd/syms.c +++ b/contrib/binutils/bfd/syms.c @@ -1,6 +1,6 @@ /* Generic symbol-table support for the BFD library. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003 + 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Written by Cygnus Support. @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* SECTION @@ -355,7 +355,7 @@ bfd_is_local_label (bfd *abfd, asymbol *sym) /* The BSF_SECTION_SYM check is needed for IA-64, where every label that starts with '.' is local. This would accidentally catch section names if we didn't reject them here. */ - if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_SECTION_SYM)) != 0) + if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_FILE | BSF_SECTION_SYM)) != 0) return FALSE; if (sym->name == NULL) return FALSE; @@ -382,6 +382,23 @@ DESCRIPTION /* FUNCTION + bfd_is_target_special_symbol + +SYNOPSIS + bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); + +DESCRIPTION + Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something + special to the particular target represented by the BFD. Such symbols + should normally not be mentioned to the user. + +.#define bfd_is_target_special_symbol(abfd, sym) \ +. BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym)) +. +*/ + +/* +FUNCTION bfd_canonicalize_symtab DESCRIPTION @@ -934,8 +951,12 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, return TRUE; } - stabsize = info->stabsec->_raw_size; - strsize = info->strsec->_raw_size; + stabsize = (info->stabsec->rawsize + ? info->stabsec->rawsize + : info->stabsec->size); + strsize = (info->strsec->rawsize + ? info->strsec->rawsize + : info->strsec->size); } else { @@ -965,8 +986,12 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, return TRUE; } - stabsize = info->stabsec->_raw_size; - strsize = info->strsec->_raw_size; + stabsize = (info->stabsec->rawsize + ? info->stabsec->rawsize + : info->stabsec->size); + strsize = (info->strsec->rawsize + ? info->strsec->rawsize + : info->strsec->size); info->stabs = bfd_alloc (abfd, stabsize); info->strs = bfd_alloc (abfd, strsize); @@ -974,9 +999,9 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, return FALSE; if (! bfd_get_section_contents (abfd, info->stabsec, info->stabs, - (bfd_vma) 0, stabsize) + 0, stabsize) || ! bfd_get_section_contents (abfd, info->strsec, info->strs, - (bfd_vma) 0, strsize)) + 0, strsize)) return FALSE; /* If this is a relocatable object file, we have to relocate @@ -1008,6 +1033,10 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, asymbol *sym; r = *pr; + /* Ignore R_*_NONE relocs. */ + if (r->howto->dst_mask == 0) + continue; + if (r->howto->rightshift != 0 || r->howto->size != 2 || r->howto->bitsize != 32 |