Correct handling of non-global syms in linkonce sections.
authorAlan Modra <amodra@gmail.com>
Thu, 5 Oct 2000 01:49:36 +0000 (01:49 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 5 Oct 2000 01:49:36 +0000 (01:49 +0000)
Tidy a few comments.

gas/ChangeLog
gas/config/tc-i386.c
gas/config/tc-i386.h

index 0424192f30ef2029bf9acc328da83fa6c048cd0a..dbc725a11aa5f82ac3d853e941d1a0b14c2350e3 100644 (file)
@@ -1,3 +1,10 @@
+2000-10-05  Alan Modra  <alan@linuxcare.com.au>
+
+       * config/tc-i386.c: Delete some useless comments, reformat others.
+
+       * config/tc-i386.h (TC_FIX_ADJUSTABLE): Add check to cover
+       non-global syms in linkonce sections.
+
 2000-10-04  Ralf Baechle  <ralf@gnu.org>
 
        * config/tc-ia64.c (operand_match): Don't use // style comments.
index 5f85b2b37d6b21d34986d8f02b4e15df0fc89fc9..31e6bfaed06e0b4150502c2e3daf1c564e406b28 100644 (file)
@@ -117,7 +117,7 @@ struct _i386_insn
 
     /* SEG gives the seg_entries of this insn.  They are zero unless
        explicit segment overrides are given.  */
-    const seg_entry *seg[2];   /* segments for memory operands (if given) */
+    const seg_entry *seg[2];
 
     /* PREFIX holds all the given prefix opcodes (usually null).
        PREFIXES is the number of prefix opcodes.  */
@@ -142,7 +142,7 @@ const char extra_symbol_chars[] = "*%-(";
 #endif
 
 /* This array holds the chars that always start a comment.  If the
-   pre-processor is disabled, these aren't very useful */
+   pre-processor is disabled, these aren't very useful */
 #if defined (TE_I386AIX) || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && ! defined (TE_LINUX) && !defined(TE_FreeBSD))
 /* Putting '/' here makes it impossible to use the divide operator.
    However, we need it for compatibility with SVR4 systems.  */
@@ -155,11 +155,11 @@ const char comment_chars[] = "#";
 
 /* This array holds the chars that only start a comment at the beginning of
    a line.  If the line seems to have the form '# 123 filename'
-   .line and .file directives will appear in the pre-processed output */
-/* Note that input_file.c hand checks for '#' at the beginning of the
+   .line and .file directives will appear in the pre-processed output.
+   Note that input_file.c hand checks for '#' at the beginning of the
    first line of the input file.  This is because the compiler outputs
-   #NO_APP at the beginning of its output.  */
-/* Also note that comments started like this one will always work if
+   #NO_APP at the beginning of its output.
+   Also note that comments started like this one will always work if
    '/' isn't otherwise defined.  */
 #if defined (TE_I386AIX) || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && ! defined (TE_LINUX) && !defined(TE_FreeBSD))
 const char line_comment_chars[] = "";
@@ -169,22 +169,23 @@ const char line_comment_chars[] = "/";
 
 const char line_separator_chars[] = ";";
 
-/* Chars that can be used to separate mant from exp in floating point nums */
+/* Chars that can be used to separate mant from exp in floating point
+   nums.  */
 const char EXP_CHARS[] = "eE";
 
-/* Chars that mean this number is a floating point constant */
-/* As in 0f12.456 */
-/* or    0d1.2345e12 */
+/* Chars that mean this number is a floating point constant
+   As in 0f12.456
+   or    0d1.2345e12.  */
 const char FLT_CHARS[] = "fFdDxX";
 
-/* tables for lexical analysis */
+/* Tables for lexical analysis.  */
 static char mnemonic_chars[256];
 static char register_chars[256];
 static char operand_chars[256];
 static char identifier_chars[256];
 static char digit_chars[256];
 
-/* lexical macros */
+/* Lexical macros.  */
 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
 #define is_operand_char(x) (operand_chars[(unsigned char) x])
 #define is_register_char(x) (register_chars[(unsigned char) x])
@@ -192,7 +193,7 @@ static char digit_chars[256];
 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
 #define is_digit_char(x) (digit_chars[(unsigned char) x])
 
-/* put here all non-digit non-letter charcters that may occur in an operand */
+/* All non-digit non-letter charcters that may occur in an operand.  */
 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
 
 /* md_assemble() always leaves the strings it's passed unaltered.  To
@@ -200,7 +201,7 @@ static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
    with '\0's (indicating end of strings for various sub-fields of the
    assembler instruction).  */
 static char save_stack[32];
-static char *save_stack_p;     /* stack pointer */
+static char *save_stack_p;
 #define END_STRING_AND_SAVE(s) \
        do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
 #define RESTORE_END_STRING(s) \
@@ -250,8 +251,8 @@ static unsigned int cpu_arch_flags = 0;
    sort of jump to choose to reach a given label.  */
 
 /* Types.  */
-#define COND_JUMP 1            /* Conditional jump.  */
-#define UNCOND_JUMP 2          /* Unconditional jump.  */
+#define COND_JUMP 1
+#define UNCOND_JUMP 2
 /* Sizes.  */
 #define CODE16 1
 #define SMALL  0
@@ -286,8 +287,7 @@ const relax_typeS md_relax_table[] =
      1) most positive reach of this state,
      2) most negative reach of this state,
      3) how many bytes this mode will add to the size of the current frag
-     4) which index into the table to try if we can't fit into this one.
-  */
+     4) which index into the table to try if we can't fit into this one.  */
   {1, 1, 0, 0},
   {1, 1, 0, 0},
   {1, 1, 0, 0},
@@ -333,9 +333,9 @@ i386_align_code (fragP, count)
      fragS *fragP;
      int count;
 {
-  /* Various efficient no-op patterns for aligning code labels.  */
-  /* Note: Don't try to assemble the instructions in the comments.  */
-  /*       0L and 0w are not legal */
+  /* Various efficient no-op patterns for aligning code labels.
+     Note: Don't try to assemble the instructions in the comments.
+     0L and 0w are not legal.  */
   static const char f32_1[] =
     {0x90};                                    /* nop                  */
   static const char f32_2[] =
@@ -427,7 +427,7 @@ static const reg_entry *parse_register PARAMS ((char *reg_string,
 static void s_bss PARAMS ((int));
 #endif
 
-symbolS *GOT_symbol;           /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
+symbolS *GOT_symbol;           /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
 
 static INLINE unsigned int
 mode_from_disp_size (t)
@@ -821,7 +821,7 @@ i386_print_statistics (file)
 \f
 #ifdef DEBUG386
 
-/* debugging routines for md_assemble */
+/* Debugging routines for md_assemble.  */
 static void pi PARAMS ((char *, i386_insn *));
 static void pte PARAMS ((template *));
 static void pt PARAMS ((unsigned int));
@@ -978,7 +978,7 @@ tc_i386_force_relocation (fixp)
     return 1;
   return 0;
 #else
-  /* For COFF */
+  /* For COFF */
   return fixp->fx_r_type == 7;
 #endif
 }
@@ -1036,7 +1036,7 @@ tc_i386_fix_adjustable (fixP)
       || S_IS_WEAK (fixP->fx_addsy))
     return 0;
 #endif
-  /* adjust_reloc_syms doesn't know about the GOT */
+  /* adjust_reloc_syms doesn't know about the GOT */
   if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_386_PLT32
       || fixP->fx_r_type == BFD_RELOC_386_GOT32
@@ -1095,7 +1095,7 @@ md_assemble (line)
     i.disp_reloc[j] = NO_RELOC;
   memset (disp_expressions, '\0', sizeof (disp_expressions));
   memset (im_expressions, '\0', sizeof (im_expressions));
-  save_stack_p = save_stack;   /* reset stack pointer */
+  save_stack_p = save_stack;
 
   /* First parse an instruction mnemonic & call i386_operand for the operands.
      We assume that the scrubber has arranged it so that line[0] is the valid
@@ -1186,7 +1186,7 @@ md_assemble (line)
            current_templates = hash_find (op_hash, mnemonic);
            break;
 
-         /* Intel Syntax */
+         /* Intel Syntax */
          case DWORD_MNEM_SUFFIX:
            if (intel_syntax)
              {
@@ -1217,7 +1217,7 @@ md_assemble (line)
          }
       }
 
-    /* check for rep/repne without a string instruction */
+    /* Check for rep/repne without a string instruction.  */
     if (expecting_string_instruction
        && !(current_templates->start->opcode_modifier & IsString))
       {
@@ -1229,8 +1229,6 @@ md_assemble (line)
     /* There may be operands to parse.  */
     if (*l != END_OF_INSN)
       {
-       /* parse operands */
-
        /* 1 if operand is pending after ','.  */
        unsigned int expecting_operand = 0;
 
@@ -1239,7 +1237,7 @@ md_assemble (line)
 
        do
          {
-           /* skip optional white space before operand */
+           /* Skip optional white space before operand.  */
            if (is_space_char (*l))
              ++l;
            if (!is_operand_char (*l) && *l != END_OF_INSN)
@@ -1311,7 +1309,7 @@ md_assemble (line)
                else
                  operand_ok = i386_operand (token_start);
 
-               RESTORE_END_STRING (l); /* restore old contents */
+               RESTORE_END_STRING (l);
                if (!operand_ok)
                  return;
              }
@@ -1330,17 +1328,18 @@ md_assemble (line)
                  }
              }
 
-           /* now *l must be either ',' or END_OF_INSN */
+           /* Now *l must be either ',' or END_OF_INSN.  */
            if (*l == ',')
              {
                if (*++l == END_OF_INSN)
-                 {             /* just skip it, if it's \n complain */
+                 {
+                   /* Just skip it, if it's \n complain.  */
                    goto expecting_operand_after_comma;
                  }
                expecting_operand = 1;
              }
          }
-       while (*l != END_OF_INSN);      /* until we get end of insn */
+       while (*l != END_OF_INSN);
       }
   }
 
@@ -1522,8 +1521,8 @@ md_assemble (line)
                 && (t->opcode_modifier & IgnoreSize))
            && !(intel_syntax
                 && t->base_opcode == 0xd9
-                && (t->extension_opcode == 5   /* 0xd9,5 "fldcw"  */
-                    || t->extension_opcode == 7))) /* 0xd9,7 "f{n}stcw"  */
+                && (t->extension_opcode == 5        /* 0xd9,5 "fldcw"  */
+                    || t->extension_opcode == 7)))  /* 0xd9,7 "f{n}stcw"  */
          continue;
 
        else if (!t->operands)
@@ -1586,11 +1585,11 @@ md_assemble (line)
                  continue;
              }
            /* Found either forward/reverse 2 or 3 operand match here:
-              slip through to break */
+              slip through to break */
          }
        /* We've found a match; break out of loop.  */
        break;
-      }                                /* for (t = ...  */
+      }
     if (t == current_templates->end)
       {
        /* We found no match.  */
@@ -1641,7 +1640,7 @@ md_assemble (line)
       if (! add_prefix (FWAIT_OPCODE))
        return;
 
-    /* Check string instruction segment overrides */
+    /* Check string instruction segment overrides */
     if ((i.tm.opcode_modifier & IsString) != 0 && i.mem_operands != 0)
       {
        int mem_op = (i.types[0] & AnyMem) ? 0 : 1;
@@ -1739,7 +1738,7 @@ md_assemble (line)
 #endif
                    continue;
                  }
-               /* Any other register is bad */
+               /* Any other register is bad */
                if (i.types[op] & (Reg | RegMMX | RegXMM
                                   | SReg2 | SReg3
                                   | Control | Debug | Test
@@ -1869,7 +1868,7 @@ md_assemble (line)
     if (overlap0 & ImplicitRegister)
       i.reg_operands--;
     if (overlap0 & Imm1)
-      i.imm_operands = 0;      /* kludge for shift insns */
+      i.imm_operands = 0;      /* kludge for shift insns */
 
     i.types[1] = overlap1;
     if (overlap1 & ImplicitRegister)
@@ -1888,7 +1887,7 @@ md_assemble (line)
        return;
       }
 
-    /* For movzx and movsx, need to check the register type */
+    /* For movzx and movsx, need to check the register type */
     if (intel_syntax
        && (i.tm.base_opcode == 0xfb6 || i.tm.base_opcode == 0xfbe))
       if (i.suffix && i.suffix == BYTE_MNEM_SUFFIX)
@@ -2542,7 +2541,7 @@ md_assemble (line)
                      }
                  }
              }
-         }                     /* End displacement output.  */
+         }
 
        /* Output immediate.  */
        if (i.imm_operands)
@@ -2572,8 +2571,9 @@ md_assemble (line)
                        md_number_to_chars (p, val, size);
                      }
                    else
-                     {         /* Not absolute_section.  */
-                       /* Need a 32-bit fixup (don't support 8bit
+                     {
+                       /* Not absolute_section.
+                          Need a 32-bit fixup (don't support 8bit
                           non-absolute imms).  Try to support other
                           sizes ...  */
 #ifdef BFD_ASSEMBLER
@@ -2610,7 +2610,7 @@ md_assemble (line)
                      }
                  }
              }
-         }                     /* end immediate output  */
+         }
       }
 
 #ifdef DEBUG386
@@ -3297,7 +3297,7 @@ i386_intel_memory_operand (operand_string)
     {
       ++op_string;
 
-      /* Pick off each component and figure out where it belongs */
+      /* Pick off each component and figure out where it belongs */
 
       end_of_operand_string = op_string;
 
@@ -3422,7 +3422,7 @@ i386_intel_operand (operand_string, got_a_float)
 
     case SHORT:
     case NONE_FOUND:
-      /* Should be register or immediate */
+      /* Should be register or immediate */
       if (is_digit_char (*op_string)
          && strchr (op_string, '[') == 0)
        {
@@ -3475,7 +3475,7 @@ i386_intel_operand (operand_string, got_a_float)
        return 0;
 
       break;
-    }  /* end switch */
+    }
 
   return 1;
 }
@@ -3575,7 +3575,7 @@ i386_operand (operand_string)
       return 0;
     }
   else if (*op_string == IMMEDIATE_PREFIX)
-    {                          /* ... or an immediate  */
+    {
       ++op_string;
       if (i.types[this_operand] & JumpAbsolute)
        {
@@ -3754,7 +3754,8 @@ i386_operand (operand_string)
       i.mem_operands++;
     }
   else
-    {                          /* It's not a memory operand; argh!  */
+    {
+      /* It's not a memory operand; argh!  */
       as_bad (_("invalid char %s beginning operand %d `%s'"),
              output_invalid (*op_string),
              this_operand + 1,
@@ -3818,7 +3819,6 @@ md_estimate_size_before_relax (fragP, segment)
        {
        case JUMP_PC_RELATIVE:
          /* Make jmp (0xeb) a dword displacement jump.  */
-         /* dword disp jmp  */
          opcode[0] = 0xe9;
          fragP->fr_fix += size;
          fix_new (fragP, old_fr_fix, size,
index c9e29c6d78623c270d0117921134c20c8b9e6c85..1c62e709c3f650ee5d2716b59db63d8aa62b0320 100644 (file)
@@ -43,8 +43,15 @@ extern int tc_i386_fix_adjustable PARAMS ((struct fix *));
 
 #if (defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF) || defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)) && !defined (TE_PE)
 /* This arranges for gas/write.c to not apply a relocation if
-   tc_fix_adjustable() says it is not adjustable.  */
-#define TC_FIX_ADJUSTABLE(fixP) tc_fix_adjustable (fixP)
+   tc_fix_adjustable() says it is not adjustable.
+   The "! symbol_used_in_reloc_p" test is there specifically to cover
+   the case of non-global symbols in linkonce sections.  It's the
+   generally correct thing to do though;  If a reloc is going to be
+   emitted against a symbol then we don't want to adjust the fixup by
+   applying the reloc during assembly.  The reloc will be applied by
+   the linker during final link.  */
+#define TC_FIX_ADJUSTABLE(fixP) \
+  (! symbol_used_in_reloc_p ((fixP)->fx_addsy) && tc_fix_adjustable (fixP))
 #endif
 
 /* This is the relocation type for direct references to GLOBAL_OFFSET_TABLE.