* coff-a29k.c: defined RELOC_PROCESSING to take the #ifdef out of
authorSteve Chamberlain <sac@cygnus>
Sun, 1 Dec 1991 07:37:33 +0000 (07:37 +0000)
committerSteve Chamberlain <sac@cygnus>
Sun, 1 Dec 1991 07:37:33 +0000 (07:37 +0000)
coffcode.h
* coffcode.h: use the new macro if available

bfd/ChangeLog
bfd/coff-a29k.c

index bd68760..881b27a 100644 (file)
@@ -1,5 +1,9 @@
 Sat Nov 30 21:19:15 1991  Steve Chamberlain  (sac at rtl.cygnus.com)
 
+       * coff-a29k.c: defined RELOC_PROCESSING to take the #ifdef out of
+       coffcode.h
+       * coffcode.h: use the new macro if available
+
        * elf.c (elf_corefile_note): cast malloc to avoid warning.
        * Makefile.in: Fixed dependencies due to file rename
 
index 0ba2f49..0be7ba4 100644 (file)
@@ -230,18 +230,45 @@ static reloc_howto_type howto_table[] =
 
 #define BADMAG(x) A29KBADMAG(x)
 
-/* This macro translates an external r_type field into a pointer to an
-   entry in the above table */
-
-
-#define RTYPE2HOWTO(cache_ptr, dst)                            \
-           if (dst.r_type == R_IHCONST) {                      \
-               /* Add in the value which was stored in the symbol index */\
-               cache_ptr->addend += dst.r_symndx;              \
-               /* Throw away the bogus symbol pointer */       \
-               cache_ptr->sym_ptr_ptr = 0;                     \
-           }                                                   \
-           cache_ptr->howto = howto_table + dst.r_type;        \
+#define RELOC_PROCESSING(relent, reloc, symbols, abfd, section) \
+ reloc_processing(relent, reloc, symbols, abfd, section)
+
+void DEFUN(reloc_processing,(relent,reloc, symbols, abfd, section) ,
+          arelent *relent AND
+          struct internal_reloc *reloc AND
+          asymbol **symbols AND
+          bfd *abfd AND
+          asection *section)
+{
+    relent->address = reloc->r_vaddr;          
+    relent->howto = howto_table + reloc->r_type;
+    if (reloc->r_type == R_IHCONST) 
+    {          
+       relent->addend = reloc->r_symndx;               
+       relent->sym_ptr_ptr= 0;
+    }
+    else 
+    {
+      asymbol *ptr;
+      relent->sym_ptr_ptr = symbols + obj_convert(abfd)[reloc->r_symndx];
+
+      ptr = *(relent->sym_ptr_ptr);
+
+      if (ptr 
+         && ptr->the_bfd == abfd               
+         && ptr->section != (asection *) NULL  
+         && ((ptr->flags & BSF_OLD_COMMON)== 0))       
+      {                                                
+         relent->addend = -(ptr->section->vma + ptr->value);   
+      }                                                
+      else
+      {                                        
+         relent->addend = 0;                   
+      }                        
+      relent->address-= section->vma;
+      relent->section = 0;
+  }
+}
 
 #include "coffcode.h"