* Many files: Changes to avoid gcc warnings: Remove unused local
[deliverable/binutils-gdb.git] / bfd / coffcode.h
index 99bf9e521a09ffdb4c3025f05d68400f7f726750..f48425ef3be6a082cdb2d4cbaab08e767b1464d9 100644 (file)
@@ -588,6 +588,12 @@ styp_to_sec_flags (abfd, hdr, name)
          can't call slurp_symtab, because the linker doesn't want the
          swapped symbols.  */
 
+      /* COMDAT sections are special.  The first symbol is the section
+        symbol, which tells what kind of COMDAT section it is.  The
+        *second* symbol is the "comdat symbol" - the one with the
+        unique name.  GNU uses the section symbol for the unique
+        name; MS uses ".text" for every comdat section.  Sigh.  - DJ */
+
       if (_bfd_coff_get_external_symbols (abfd))
        {
          bfd_byte *esym, *esymend;
@@ -629,10 +635,23 @@ styp_to_sec_flags (abfd, hdr, name)
                                            isym.n_type, isym.n_sclass,
                                            0, isym.n_numaux, (PTR) &aux);
 
+                     /* FIXME: Microsoft uses NODUPLICATES and
+                        ASSOCIATIVE, but gnu uses ANY and SAME_SIZE.
+                        Unfortunately, gnu doesn't do the comdat
+                        symbols right.  So, until we can fix it to do
+                        the right thing, we are temporarily disabling
+                        comdats for the MS types (they're used in
+                        DLLs and C++, but we don't support *their*
+                        C++ libraries anyway - DJ */
+
                      switch (aux.x_scn.x_comdat)
                        {
                        case IMAGE_COMDAT_SELECT_NODUPLICATES:
+#if 0
                          sec_flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
+#else
+                         sec_flags &= ~SEC_LINK_ONCE;
+#endif
                          break;
 
                        default:
@@ -649,8 +668,12 @@ styp_to_sec_flags (abfd, hdr, name)
                          break;
 
                        case IMAGE_COMDAT_SELECT_ASSOCIATIVE:
+#if 0
                          /* FIXME: This is not currently implemented.  */
                          sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+#else
+                         sec_flags &= ~SEC_LINK_ONCE;
+#endif
                          break;
                        }
 
@@ -1104,12 +1127,10 @@ coff_set_alignment_hook (abfd, section, scnhdr)
     if ((1 << i) >= hdr->s_align)
       break;
 #endif
-/* start-sanitize-tic80 */
 #ifdef TIC80COFF
   /* TI tools hijack bits 8-11 for the alignment */
   i = (hdr->s_flags >> 8) & 0xF ;
 #endif
-/* end-sanitize-tic80 */
   section->alignment_power = i;
 }
 
@@ -1207,6 +1228,9 @@ coff_set_alignment_hook (abfd, section, scnhdr)
     }
 #endif
 
+#ifdef COFF_WITH_PE
+  section->lma = hdr->s_vaddr;
+#endif
 }
 #undef ALIGN_SET
 #undef ELIFALIGN_SET
@@ -1398,13 +1422,14 @@ coff_set_arch_mach_hook (abfd, filehdr)
       arch = bfd_arch_arm;
       switch (internal_f->f_flags & F_ARM_ARCHITECTURE_MASK)
        {
-       case F_ARM_2:  machine = bfd_mach_arm_2;  break;
-       case F_ARM_2a: machine = bfd_mach_arm_2a; break;
-       case F_ARM_3:  machine = bfd_mach_arm_3;  break;
-       default:
-       case F_ARM_3M: machine = bfd_mach_arm_3M; break;
-       case F_ARM_4:  machine = bfd_mach_arm_4;  break;
-       case F_ARM_4T: machine = bfd_mach_arm_4T; break;
+        case F_ARM_2:  machine = bfd_mach_arm_2;  break;
+        case F_ARM_2a: machine = bfd_mach_arm_2a; break;
+        case F_ARM_3:  machine = bfd_mach_arm_3;  break;
+        default:
+        case F_ARM_3M: machine = bfd_mach_arm_3M; break;
+        case F_ARM_4:  machine = bfd_mach_arm_4;  break;
+        case F_ARM_4T: machine = bfd_mach_arm_4T; break;
+        case F_ARM_5:  machine = bfd_mach_arm_5;  break;
        }
       break;
 #endif
@@ -1626,14 +1651,17 @@ coff_set_arch_mach_hook (abfd, filehdr)
       break;
 #endif
 
-/* start-sanitize-tic80 */
 #ifdef TIC80_ARCH_MAGIC
     case TIC80_ARCH_MAGIC:
       arch = bfd_arch_tic80;
       break;
 #endif
-/* end-sanitize-tic80 */
 
+#ifdef MCOREMAGIC
+    case MCOREMAGIC:
+      arch = bfd_arch_mcore;
+      break;
+#endif
     default:                   /* Unreadable input file type */
       arch = bfd_arch_obscure;
       break;
@@ -2010,13 +2038,11 @@ coff_set_flags (abfd, magicp, flagsp)
       *magicp = TIC30MAGIC;
       return true;
 #endif
-/* start-sanitize-tic80 */
 #ifdef TIC80_ARCH_MAGIC
     case bfd_arch_tic80:
       *magicp = TIC80_ARCH_MAGIC;
       return true;
 #endif
-/* end-sanitize-tic80 */
 #ifdef ARMMAGIC
     case bfd_arch_arm:
       * magicp = ARMMAGIC;
@@ -2042,6 +2068,8 @@ coff_set_flags (abfd, magicp, flagsp)
        case bfd_mach_arm_3M: * flagsp |= F_ARM_3M; break;
        case bfd_mach_arm_4:  * flagsp |= F_ARM_4;  break;
        case bfd_mach_arm_4T: * flagsp |= F_ARM_4T; break;
+       case bfd_mach_arm_5:  * flagsp |= F_ARM_5;  break;
+       case bfd_mach_arm_5T: * flagsp |= F_ARM_5;  break; /* XXX - we do not have an F_ARM_5T */
        }
       return true;
 #endif
@@ -2164,6 +2192,12 @@ coff_set_flags (abfd, magicp, flagsp)
       break;
 #endif
 
+#ifdef MCOREMAGIC
+    case bfd_arch_mcore:
+      * magicp = MCOREMAGIC;
+      return true;
+#endif
+      
     default:                   /* Unknown architecture */
       /* return false;  -- fall through to "return false" below, to avoid
        "statement never reached" errors on the one below. */
@@ -2199,11 +2233,9 @@ coff_set_arch_mach (abfd, arch, machine)
 #ifndef I960
 #define ALIGN_SECTIONS_IN_FILE
 #endif
-/* start-sanitize-tic80 */
 #ifdef TIC80COFF
 #undef ALIGN_SECTIONS_IN_FILE
 #endif
-/* end-sanitize-tic80 */
 
 static boolean
 coff_compute_section_file_positions (abfd)
@@ -2723,12 +2755,10 @@ coff_write_object_contents (abfd)
       section.s_align = (current->alignment_power
                         ? 1 << current->alignment_power
                         : 0);
-/* start-sanitize-tic80 */
 #else
 #ifdef TIC80COFF
       section.s_flags |= (current->alignment_power & 0xF) << 8;
 #endif
-/* end-sanitize-tic80 */
 #endif
 
 #ifdef COFF_IMAGE_WITH_PE
@@ -2910,11 +2940,9 @@ coff_write_object_contents (abfd)
   else
     internal_f.f_flags |= F_AR32W;
 
-/* start-sanitize-tic80 */
 #ifdef TIC80_TARGET_ID
   internal_f.f_target_id = TIC80_TARGET_ID;
 #endif
-/* end-sanitize-tic80 */
 
   /*
      FIXME, should do something about the other byte orders and
@@ -2953,12 +2981,10 @@ coff_write_object_contents (abfd)
       internal_a.magic = NMAGIC; /* Assume separate i/d */
 #define __A_MAGIC_SET__
 #endif /* A29K */
-/* start-sanitize-tic80 */
 #ifdef TIC80COFF
     internal_a.magic = TIC80_ARCH_MAGIC;
 #define __A_MAGIC_SET__
 #endif /* TIC80 */
-/* end-sanitize-tic80 */
 #ifdef I860
     /* FIXME: What are the a.out magic numbers for the i860?  */
     internal_a.magic = 0;
@@ -3005,6 +3031,11 @@ coff_write_object_contents (abfd)
     internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
 #endif
 
+#if defined MCORE_PE
+#define __A_MAGIC_SET__
+    internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
+#endif 
+
 #if defined(I386)
 #define __A_MAGIC_SET__
 #if defined(LYNXOS)
@@ -3058,6 +3089,15 @@ coff_write_object_contents (abfd)
       if (! coff_write_relocs (abfd, firstundef))
        return false;
     }
+#ifdef COFF_LONG_SECTION_NAMES
+  else if (long_section_names)
+    {
+      /* If we have long section names we have to write out the string
+         table even if there are no symbols.  */
+      if (! coff_write_symbols (abfd))
+       return false;
+    }
+#endif
 #ifdef COFF_IMAGE_WITH_PE
 #ifdef PPC_PE
   else if ((abfd->flags & EXEC_P) != 0)
@@ -3506,6 +3546,7 @@ coff_slurp_symbol_table (abfd)
 #endif
 
            case C_EXT:
+           case C_WEAKEXT:
 #if defined ARM
             case C_THUMBEXT:
             case C_THUMBEXTFUNC:
@@ -3571,8 +3612,16 @@ coff_slurp_symbol_table (abfd)
 #ifdef COFF_WITH_PE
              if (src->u.syment.n_sclass == C_NT_WEAK)
                dst->symbol.flags = BSF_WEAK;
+             if (src->u.syment.n_sclass == C_SECTION
+                 && src->u.syment.n_scnum > 0)
+               {
+                 dst->symbol.flags = BSF_LOCAL;
+               }
 #endif
 
+             if (src->u.syment.n_sclass == C_WEAKEXT)
+               dst->symbol.flags = BSF_WEAK;
+
              break;
 
            case C_STAT:        /* static                        */
@@ -3616,15 +3665,11 @@ coff_slurp_symbol_table (abfd)
 #endif
            case C_REGPARM:     /* register parameter            */
            case C_REG: /* register variable             */
-/* start-sanitize-tic80 */
 #ifndef TIC80COFF
-/* end-sanitize-tic80 */
 #ifdef C_AUTOARG
            case C_AUTOARG:     /* 960-specific storage class */
 #endif
-/* start-sanitize-tic80 */
 #endif
-/* end-sanitize-tic80 */
            case C_TPDEF:       /* type definition               */
            case C_ARG:
            case C_AUTO:        /* automatic variable */
@@ -3727,14 +3772,12 @@ coff_slurp_symbol_table (abfd)
              /* NT uses 0x67 for a weak symbol, not C_ALIAS.  */
            case C_ALIAS:       /* duplicate tag                 */
 #endif
-/* start-sanitize-tic80 */
              /* New storage classes for TIc80 */
 #ifdef TIC80COFF
            case C_UEXT:        /* Tentative external definition */
 #endif
            case C_STATLAB:     /* Static load time label */
            case C_EXTLAB:      /* External load time label */
-/* end-sanitize-tic80 */
            case C_HIDDEN:      /* ext symbol in dmert public lib */
            default:
              (*_bfd_error_handler)
@@ -4141,20 +4184,26 @@ dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
 #endif
 
 #ifndef coff_link_output_has_begun
-#define coff_link_output_has_begun _coff_link_output_has_begun
+
+static boolean coff_link_output_has_begun
+  PARAMS ((bfd *, struct coff_final_link_info *));
+
 static boolean
-_coff_link_output_has_begun (abfd, info)
+coff_link_output_has_begun (abfd, info)
      bfd * abfd;
-     struct bfd_link_info * info;
+     struct coff_final_link_info * info;
 {
   return abfd->output_has_begun;
 }
 #endif
 
 #ifndef coff_final_link_postscript
-#define coff_final_link_postscript _coff_final_link_postscript
+
+static boolean coff_final_link_postscript
+  PARAMS ((bfd *, struct coff_final_link_info *));
+
 static boolean
-_coff_final_link_postscript (abfd, pfinfo)
+coff_final_link_postscript (abfd, pfinfo)
      bfd * abfd;
      struct coff_final_link_info * pfinfo;
 {
This page took 0.026022 seconds and 4 git commands to generate.