| Index: bfd/vms-alpha.c | 
| diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c | 
| index 8b98560743731a3d8983e9800cd8c4407c589a38..09438aebf1d203c882ac305c87e5eddded83a2b1 100644 | 
| --- a/bfd/vms-alpha.c | 
| +++ b/bfd/vms-alpha.c | 
| @@ -1,6 +1,5 @@ | 
| /* vms.c -- BFD back-end for EVAX (openVMS/Alpha) files. | 
| -   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, | 
| -   2006, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc. | 
| +   Copyright 1996-2013 Free Software Foundation, Inc. | 
|  | 
| Initial version written by Klaus Kaempf (kkaempf@rmi.de) | 
| Major rewrite by Adacore. | 
| @@ -331,10 +330,6 @@ struct vms_private_data_struct | 
|  | 
| /* linkage index counter used by conditional store commands */ | 
| unsigned int vms_linkage_index; | 
| - | 
| -  /* see tc-alpha.c of gas for a description.  */ | 
| -  int flag_hash_long_names;	/* -+, hash instead of truncate */ | 
| -  int flag_show_after_trunc;	/* -H, show hashing/truncation */ | 
| }; | 
|  | 
| #define PRIV2(abfd, name) \ | 
| @@ -2686,88 +2681,6 @@ _bfd_vms_write_eeom (bfd *abfd) | 
| return TRUE; | 
| } | 
|  | 
| -/* This hash routine borrowed from GNU-EMACS, and strengthened | 
| -   slightly.  ERY.  */ | 
| - | 
| -static int | 
| -hash_string (const char *ptr) | 
| -{ | 
| -  const unsigned char *p = (unsigned char *) ptr; | 
| -  const unsigned char *end = p + strlen (ptr); | 
| -  unsigned char c; | 
| -  int hash = 0; | 
| - | 
| -  while (p != end) | 
| -    { | 
| -      c = *p++; | 
| -      hash = ((hash << 3) + (hash << 15) + (hash >> 28) + c); | 
| -    } | 
| -  return hash; | 
| -} | 
| - | 
| -/* Generate a length-hashed VMS symbol name (limited to maxlen chars).  */ | 
| - | 
| -static char * | 
| -_bfd_vms_length_hash_symbol (bfd *abfd, const char *in, int maxlen) | 
| -{ | 
| -  unsigned long result; | 
| -  int in_len; | 
| -  char *new_name; | 
| -  const char *old_name; | 
| -  int i; | 
| -  static char outbuf[EOBJ__C_SYMSIZ + 1]; | 
| -  char *out = outbuf; | 
| - | 
| -#if VMS_DEBUG | 
| -  vms_debug (4, "_bfd_vms_length_hash_symbol \"%s\"\n", in); | 
| -#endif | 
| - | 
| -  if (maxlen > EOBJ__C_SYMSIZ) | 
| -    maxlen = EOBJ__C_SYMSIZ; | 
| - | 
| -  /* Save this for later.  */ | 
| -  new_name = out; | 
| - | 
| -  /* We may need to truncate the symbol, save the hash for later.  */ | 
| -  in_len = strlen (in); | 
| - | 
| -  result = (in_len > maxlen) ? hash_string (in) : 0; | 
| - | 
| -  old_name = in; | 
| - | 
| -  /* Do the length checking.  */ | 
| -  if (in_len <= maxlen) | 
| -    i = in_len; | 
| -  else | 
| -    { | 
| -      if (PRIV (flag_hash_long_names)) | 
| -	i = maxlen - 9; | 
| -      else | 
| -	i = maxlen; | 
| -    } | 
| - | 
| -  strncpy (out, in, (size_t) i); | 
| -  in += i; | 
| -  out += i; | 
| - | 
| -  if ((in_len > maxlen) | 
| -      && PRIV (flag_hash_long_names)) | 
| -    sprintf (out, "_%08lx", result); | 
| -  else | 
| -    *out = 0; | 
| - | 
| -#if VMS_DEBUG | 
| -  vms_debug (4, "--> [%d]\"%s\"\n", (int)strlen (outbuf), outbuf); | 
| -#endif | 
| - | 
| -  if (in_len > maxlen | 
| -	&& PRIV (flag_hash_long_names) | 
| -	&& PRIV (flag_show_after_trunc)) | 
| -    printf (_("Symbol %s replaced by %s\n"), old_name, new_name); | 
| - | 
| -  return outbuf; | 
| -} | 
| - | 
| static void | 
| vector_grow1 (struct vector_type *vec, size_t elsz) | 
| { | 
| @@ -3241,7 +3154,6 @@ alpha_vms_write_exec (bfd *abfd) | 
| for (i = 0; i < PRIV (gsd_sym_count); i++) | 
| { | 
| struct vms_symbol_entry *sym = PRIV (syms)[i]; | 
| -          char *hash; | 
| bfd_vma val; | 
| bfd_vma ep; | 
|  | 
| @@ -3268,8 +3180,7 @@ alpha_vms_write_exec (bfd *abfd) | 
| _bfd_vms_output_quad (recwr, ep); | 
| _bfd_vms_output_quad (recwr, val); | 
| _bfd_vms_output_long (recwr, 0); | 
| -          hash = _bfd_vms_length_hash_symbol (abfd, sym->name, EOBJ__C_SYMSIZ); | 
| -          _bfd_vms_output_counted (recwr, hash); | 
| +          _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| if ((i % 5) == 4) | 
| _bfd_vms_output_end (abfd, recwr); | 
| @@ -3364,8 +3275,6 @@ _bfd_vms_write_egsd (bfd *abfd) | 
| else if ((*sname == 'l') && (strcmp (sname, "lcomm") == 0)) | 
| sname = EVAX_LOCAL_NAME; | 
| } | 
| -      else | 
| -	sname = _bfd_vms_length_hash_symbol (abfd, sname, EOBJ__C_SECSIZ); | 
|  | 
| if (bfd_is_com_section (section)) | 
| new_flags = (EGPS__V_OVR | EGPS__V_REL | EGPS__V_GBL | EGPS__V_RD | 
| @@ -3405,18 +3314,13 @@ _bfd_vms_write_egsd (bfd *abfd) | 
|  | 
| for (symnum = 0; symnum < abfd->symcount; symnum++) | 
| { | 
| -      char *hash; | 
| - | 
| symbol = abfd->outsymbols[symnum]; | 
| old_flags = symbol->flags; | 
|  | 
| /* Work-around a missing feature:  consider __main as the main entry | 
| point.  */ | 
| -      if (*(symbol->name) == '_') | 
| -	{ | 
| -	  if (strcmp (symbol->name, "__main") == 0) | 
| -	    bfd_set_start_address (abfd, (bfd_vma)symbol->value); | 
| -	} | 
| +      if (symbol->name[0] == '_' && strcmp (symbol->name, "__main") == 0) | 
| +	bfd_set_start_address (abfd, (bfd_vma)symbol->value); | 
|  | 
| /* Only put in the GSD the global and the undefined symbols.  */ | 
| if (old_flags & BSF_FILE) | 
| @@ -3509,8 +3413,7 @@ _bfd_vms_write_egsd (bfd *abfd) | 
| _bfd_vms_output_long (recwr, ca_psindx); | 
| _bfd_vms_output_long (recwr, psindx); | 
| } | 
| -      hash = _bfd_vms_length_hash_symbol (abfd, symbol->name, EOBJ__C_SYMSIZ); | 
| -      _bfd_vms_output_counted (recwr, hash); | 
| +      _bfd_vms_output_counted (recwr, symbol->name); | 
|  | 
| _bfd_vms_output_end_subrec (recwr); | 
| } | 
| @@ -3528,8 +3431,6 @@ _bfd_vms_write_ehdr (bfd *abfd) | 
| { | 
| asymbol *symbol; | 
| unsigned int symnum; | 
| -  int had_case = 0; | 
| -  int had_file = 0; | 
| struct vms_rec_wr *recwr = &PRIV (recwr); | 
|  | 
| vms_debug2 ((2, "vms_write_ehdr (%p)\n", abfd)); | 
| @@ -3549,22 +3450,9 @@ _bfd_vms_write_ehdr (bfd *abfd) | 
|  | 
| if (symbol->flags & BSF_FILE) | 
| { | 
| -	  if (CONST_STRNEQ ((char *)symbol->name, "<CASE:")) | 
| -	    { | 
| -	      PRIV (flag_hash_long_names) = symbol->name[6] - '0'; | 
| -	      PRIV (flag_show_after_trunc) = symbol->name[7] - '0'; | 
| - | 
| -	      if (had_file) | 
| -		break; | 
| -	      had_case = 1; | 
| -	      continue; | 
| -	    } | 
| - | 
| _bfd_vms_output_dump (recwr, (unsigned char *) symbol->name, | 
| (int) strlen (symbol->name)); | 
| -	  if (had_case) | 
| -	    break; | 
| -	  had_file = 1; | 
| +	  break; | 
| } | 
| } | 
|  | 
| @@ -3800,7 +3688,6 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| asection *sec = sym->section; | 
| bfd_boolean defer = defer_reloc_p (rptr); | 
| unsigned int slen; | 
| -	      char *hash; | 
|  | 
| if (pass2_in_progress) | 
| { | 
| @@ -3839,13 +3726,11 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| { | 
| bfd_vma addend = rptr->addend; | 
| slen = strlen ((char *) sym->name); | 
| -		      hash = _bfd_vms_length_hash_symbol | 
| -                        (abfd, sym->name, EOBJ__C_SYMSIZ); | 
| etir_output_check (abfd, section, curr_addr, slen); | 
| if (addend) | 
| { | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_GBL); | 
| -			  _bfd_vms_output_counted (recwr, hash); | 
| +			  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_LW); | 
| _bfd_vms_output_long (recwr, (unsigned long) addend); | 
| @@ -3859,7 +3744,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| { | 
| _bfd_vms_output_begin_subrec | 
| (recwr, ETIR__C_STO_GBL_LW); | 
| -			  _bfd_vms_output_counted (recwr, hash); | 
| +			  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| } | 
| } | 
| @@ -3894,13 +3779,11 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| { | 
| bfd_vma addend = rptr->addend; | 
| slen = strlen ((char *) sym->name); | 
| -		      hash = _bfd_vms_length_hash_symbol | 
| -                        (abfd, sym->name, EOBJ__C_SYMSIZ); | 
| etir_output_check (abfd, section, curr_addr, slen); | 
| if (addend) | 
| { | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_GBL); | 
| -			  _bfd_vms_output_counted (recwr, hash); | 
| +			  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_QW); | 
| _bfd_vms_output_quad (recwr, addend); | 
| @@ -3913,7 +3796,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| else | 
| { | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STO_GBL); | 
| -			  _bfd_vms_output_counted (recwr, hash); | 
| +			  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| } | 
| } | 
| @@ -3950,20 +3833,16 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| (recwr, (unsigned long) rptr->addend); | 
| if (rptr->addend > PRIV (vms_linkage_index)) | 
| PRIV (vms_linkage_index) = rptr->addend; | 
| -		  hash = _bfd_vms_length_hash_symbol | 
| -                    (abfd, sym->name, EOBJ__C_SYMSIZ); | 
| -		  _bfd_vms_output_counted (recwr, hash); | 
| +		  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_byte (recwr, 0); | 
| _bfd_vms_output_end_subrec (recwr); | 
| break; | 
|  | 
| case ALPHA_R_CODEADDR: | 
| slen = strlen ((char *) sym->name); | 
| -		  hash = _bfd_vms_length_hash_symbol | 
| -                    (abfd, sym->name, EOBJ__C_SYMSIZ); | 
| etir_output_check (abfd, section, curr_addr, slen); | 
| _bfd_vms_output_begin_subrec (recwr, ETIR__C_STO_CA); | 
| -		  _bfd_vms_output_counted (recwr, hash); | 
| +		  _bfd_vms_output_counted (recwr, sym->name); | 
| _bfd_vms_output_end_subrec (recwr); | 
| break; | 
|  | 
| @@ -3981,9 +3860,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| _bfd_vms_output_long | 
| (recwr, (unsigned long) section->target_index); | 
| _bfd_vms_output_quad (recwr, rptr->addend); | 
| -		  _bfd_vms_output_counted | 
| -		    (recwr, _bfd_vms_length_hash_symbol | 
| -                     (abfd, udata->origname, EOBJ__C_SYMSIZ)); | 
| +		  _bfd_vms_output_counted (recwr, udata->origname); | 
| _bfd_vms_output_end_subrec (recwr); | 
| break; | 
|  | 
| @@ -4006,9 +3883,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| _bfd_vms_output_long | 
| (recwr, (unsigned long) udata->bsym->section->target_index); | 
| _bfd_vms_output_quad (recwr, rptr->addend); | 
| -		  _bfd_vms_output_counted | 
| -		    (recwr, _bfd_vms_length_hash_symbol | 
| -                     (abfd, udata->origname, EOBJ__C_SYMSIZ)); | 
| +		  _bfd_vms_output_counted (recwr, udata->origname); | 
| _bfd_vms_output_end_subrec (recwr); | 
| break; | 
|  | 
| @@ -4026,9 +3901,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) | 
| _bfd_vms_output_long | 
| (recwr, (unsigned long) section->target_index); | 
| _bfd_vms_output_quad (recwr, rptr->addend); | 
| -		  _bfd_vms_output_counted | 
| -		    (recwr, _bfd_vms_length_hash_symbol | 
| -                     (abfd, udata->origname, EOBJ__C_SYMSIZ)); | 
| +		  _bfd_vms_output_counted (recwr, udata->origname); | 
| _bfd_vms_output_end_subrec (recwr); | 
| break; | 
|  | 
| @@ -4741,6 +4614,26 @@ _bfd_vms_find_nearest_dst_line (bfd *abfd, asection *section, | 
|  | 
| return FALSE; | 
| } | 
| + | 
| +/* Likewise but with a discriminator.  */ | 
| + | 
| +static bfd_boolean | 
| +_bfd_vms_find_nearest_line_discriminator (bfd *abfd, | 
| +					  asection *section, | 
| +					  asymbol **symbols, | 
| +					  bfd_vma offset, | 
| +					  const char **filename_ptr, | 
| +					  const char **functionname_ptr, | 
| +					  unsigned int *line_ptr, | 
| +					  unsigned int *discriminator) | 
| +{ | 
| +  *discriminator = 0; | 
| + | 
| +  return _bfd_vms_find_nearest_dst_line (abfd, section, symbols, offset, | 
| +					 filename_ptr, functionname_ptr, | 
| +					 line_ptr); | 
| +} | 
| + | 
|  | 
| /* Canonicalizations.  */ | 
| /* Set name, value, section and flags of SYM from E.  */ | 
| @@ -6044,7 +5937,7 @@ evax_bfd_print_etir (FILE *file, const char *name, | 
| unsigned char *rec, unsigned int rec_len) | 
| { | 
| unsigned int off = sizeof (struct vms_egsd); | 
| -  unsigned int sec_len; | 
| +  unsigned int sec_len = 0; | 
|  | 
| fprintf (file, _("  %s (len=%u+%u):\n"), name, | 
| (unsigned)(rec_len - sizeof (struct vms_eobjrec)), | 
| @@ -7849,7 +7742,7 @@ evax_bfd_print_image (bfd *abfd, FILE *file) | 
| } | 
| if (lpfixoff != 0) | 
| { | 
| -          fprintf (file, _(" Linkage Pairs Referece Fixups:\n")); | 
| +          fprintf (file, _(" Linkage Pairs Reference Fixups:\n")); | 
| evax_bfd_print_reference_fixups (file, buf + lpfixoff); | 
| } | 
| if (chgprtoff) | 
| @@ -9118,7 +9011,8 @@ vms_new_section_hook (bfd * abfd, asection *section) | 
| vms_debug2 ((1, "vms_new_section_hook (%p, [%d]%s)\n", | 
| abfd, section->index, section->name)); | 
|  | 
| -  bfd_set_section_alignment (abfd, section, 0); | 
| +  if (! bfd_set_section_alignment (abfd, section, 0)) | 
| +    return FALSE; | 
|  | 
| vms_debug2 ((7, "%d: %s\n", section->index, section->name)); | 
|  | 
| @@ -9228,7 +9122,6 @@ static bfd_boolean | 
| vms_bfd_is_local_label_name (bfd * abfd ATTRIBUTE_UNUSED, | 
| const char *name) | 
| { | 
| -  vms_debug2 ((1, "vms_bfd_is_local_label_name (%p, %s)\n", abfd, name)); | 
| return name[0] == '$'; | 
| } | 
|  | 
| @@ -9322,6 +9215,8 @@ bfd_vms_get_data (bfd *abfd) | 
| #define alpha_vms_find_inliner_info        _bfd_nosymbols_find_inliner_info | 
| #define alpha_vms_bfd_make_debug_symbol    _bfd_nosymbols_bfd_make_debug_symbol | 
| #define alpha_vms_find_nearest_line        _bfd_vms_find_nearest_dst_line | 
| +#define _bfd_generic_find_nearest_line_discriminator \ | 
| +  _bfd_vms_find_nearest_line_discriminator | 
| #define alpha_vms_bfd_is_local_label_name  vms_bfd_is_local_label_name | 
|  | 
| /* Generic table.  */ | 
|  |