From 515b81046b52abf8f09a3b0549f271b51b526c11 Mon Sep 17 00:00:00 2001
From: Jeff Law <law@redhat.com>
Date: Mon, 7 Aug 1995 20:53:29 +0000
Subject: [PATCH] 	* som.c (som_decode_symclass): Handle absolute symbols
 by checking 	the SOM type (since they will rarely if ever be in the
 absolute 	section).

Something Ian noticed.
---
 bfd/ChangeLog | 18 ++++++++++++++++++
 bfd/som.c     | 22 +++++++++++++++++-----
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 993c78df685..49b5ed94e20 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,21 @@
+Mon Aug  7 14:51:08 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+	* som.c (som_decode_symclass): Handle absolute symbols by checking
+	the SOM type (since they will rarely if ever be in the absolute
+	section).
+
+Wed Aug  6 09:12:50 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+	* archures.c (bfd_mach_sparc, bfd_mach_sparc64): Define.
+	* bfd-in2.h: Regenerated.
+	* cpu-sparc.c (sparc_arch_info): Renamed from arch_info_struct.
+	(sparc64_arch_info): New static variable.
+	(bfd_sparc_arch): Link in sparc64_arch_info.
+	* elf64-sparc.c (sparc64_elf_xxx): Renamed from elf64_xxx.
+	(sparc64_elf_object_p): New static function.
+	(elf_backend_object_p): Define.
+	* config/sparc64-elf.mt (SELECT_VECS): Add bfd_elf32_sparc_vec.
+
 Sat Aug  5 00:04:08 1995  Jeff Law  (law@snake.cs.utah.edu)
 
 	* som (som_get_reloc_upper_bound): Return -1 on error.  Compute
diff --git a/bfd/som.c b/bfd/som.c
index 4bcd3882811..03b487e0aad 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -1523,7 +1523,12 @@ hppa_som_gen_reloc_type (abfd, base_type, format, field, sym_diff)
             bfd_set_error (bfd_error_no_memory);
             return NULL;
           }
-	  *final_types[0] = R_FSEL;
+	  if (field == e_fsel)
+	    *final_types[0] = R_FSEL;
+	  else if (field == e_rsel)
+	    *final_types[0] = R_RSEL;
+	  else if (field == e_lsel)
+	    *final_types[0] = R_LSEL;
 	  *final_types[1] = R_COMP2;
 	  *final_types[2] = R_COMP2;
 	  *final_types[3] = R_COMP1;
@@ -1576,7 +1581,12 @@ hppa_som_gen_reloc_type (abfd, base_type, format, field, sym_diff)
             bfd_set_error (bfd_error_no_memory);
             return NULL;
           }
-	  *final_types[1] = R_FSEL;
+	  if (field == e_fsel)
+	    *final_types[0] = R_FSEL;
+	  else if (field == e_rsel)
+	    *final_types[0] = R_RSEL;
+	  else if (field == e_lsel)
+	    *final_types[0] = R_LSEL;
 	  *final_types[1] = R_COMP2;
 	  *final_types[2] = R_COMP2;
 	  *final_types[3] = R_COMP1;
@@ -4605,8 +4615,8 @@ som_get_reloc_upper_bound (abfd, asect)
   if (asect->flags & SEC_RELOC)
     {
       if (! som_slurp_reloc_table (abfd, asect, NULL, true))
-	return false;
-      return (asect->reloc_count + 1) * sizeof (arelent);
+	return -1;
+      return (asect->reloc_count + 1) * sizeof (arelent *);
     }
   /* There are no relocations.  */
   return 0;
@@ -4998,7 +5008,9 @@ som_decode_symclass (symbol)
   if (!(symbol->flags & (BSF_GLOBAL|BSF_LOCAL)))
     return '?';
 
-  if (bfd_is_abs_section (symbol->section))
+  if (bfd_is_abs_section (symbol->section)
+      || (som_symbol_data (symbol) != NULL
+	  && som_symbol_data (symbol)->som_type == SYMBOL_TYPE_ABSOLUTE))
     c = 'a';
   else if (symbol->section)
     c = som_section_type (symbol->section->name);