* subsegs.c (subseg_text_p): New function.
authorIan Lance Taylor <ian@airs.com>
Sat, 12 Jun 1999 16:49:51 +0000 (16:49 +0000)
committerIan Lance Taylor <ian@airs.com>
Sat, 12 Jun 1999 16:49:51 +0000 (16:49 +0000)
* as.h (subseg_text_p): Declare.
* read.c (do_align): Use subseg_text_p to set the default fill.
* write.c (subsegs_finish): Likewise.
* config/obj-coff.c (write_object_file): Likewise.
* config/tc-i386.h (md_maybe_text): Don't define.
(md_do_align): Use subseg_text_p to set the default fill.
* config/tc-m32r.c (m32r_do_align): Likewise.
* config/tc-sh.c (sh_do_align): Likewise.
* config/tc-sparc.h (md_do_align): Likewise.

gas/ChangeLog
gas/as.h
gas/config/obj-coff.c
gas/config/tc-i386.h
gas/config/tc-m32r.c
gas/config/tc-sh.c
gas/config/tc-sparc.h
gas/read.c
gas/subsegs.c
gas/write.c

index a28308f..865284a 100644 (file)
@@ -1,3 +1,16 @@
+1999-06-12  Ian Lance Taylor  <ian@zembu.com>
+
+       * subsegs.c (subseg_text_p): New function.
+       * as.h (subseg_text_p): Declare.
+       * read.c (do_align): Use subseg_text_p to set the default fill.
+       * write.c (subsegs_finish): Likewise.
+       * config/obj-coff.c (write_object_file): Likewise.
+       * config/tc-i386.h (md_maybe_text): Don't define.
+       (md_do_align): Use subseg_text_p to set the default fill.
+       * config/tc-m32r.c (m32r_do_align): Likewise.
+       * config/tc-sh.c (sh_do_align): Likewise.
+       * config/tc-sparc.h (md_do_align): Likewise.
+
 1999-06-12  David O'Brien  <obrien@freebsd.org>
 
        * configure.in: (i[3456]86-*-freebsd*): Now defaults to ELF.
index 4be36cc..e72902b 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
@@ -585,6 +585,7 @@ void subseg_set PARAMS ((segT seg, subsegT subseg));
 #ifdef BFD_ASSEMBLER
 segT subseg_get PARAMS ((const char *, int));
 #endif
+int subseg_text_p PARAMS ((segT));
 
 void start_dependencies PARAMS ((char *));
 void register_dependency PARAMS ((char *));
index a6bdaee..e4d51dd 100644 (file)
@@ -3235,6 +3235,7 @@ write_object_file ()
         at the next frag.  */
 
       subseg_set (frchain_ptr->frch_seg, frchain_ptr->frch_subseg);
+
 #ifndef SUB_SEGMENT_ALIGN
 #define SUB_SEGMENT_ALIGN(SEG) 1
 #endif
@@ -3242,7 +3243,9 @@ write_object_file ()
       md_do_align (SUB_SEGMENT_ALIGN (now_seg), (char *) NULL, 0, 0,
                   alignment_done);
 #endif
-      frag_align (SUB_SEGMENT_ALIGN (now_seg), NOP_OPCODE, 0);
+      frag_align (SUB_SEGMENT_ALIGN (now_seg),
+                 subseg_text_p (now_seg) ? NOP_OPCODE : 0,
+                 0);
 #ifdef md_do_align
     alignment_done:
 #endif
index 112e4bc..ef778c1 100644 (file)
@@ -1,5 +1,6 @@
 /* tc-i386.h -- Header file for tc-i386.c
-   Copyright (C) 1989, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation.
+   Copyright (C) 1989, 92, 93, 94, 95, 96, 97, 98, 1999
+   Free Software Foundation.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -432,18 +433,10 @@ extern const struct relax_type md_relax_table[];
 
 extern int flag_16bit_code;
 
-#ifdef BFD_ASSEMBLER
-#define md_maybe_text() \
-  ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
-#else
-#define md_maybe_text() \
-  (now_seg != data_section && now_seg != bss_section)
-#endif
-
 #define md_do_align(n, fill, len, max, around)                         \
 if ((n) && !need_pass_2                                                        \
     && (!(fill) || ((char)*(fill) == (char)0x90 && (len) == 1))                \
-    && md_maybe_text ())                                               \
+    && subseg_text_p (now_seg))                                                \
   {                                                                    \
     char *p;                                                           \
     p = frag_var (rs_align_code, 15, 1, (relax_substateT) max,         \
index 76fb9ab..9a10824 100644 (file)
@@ -245,7 +245,7 @@ m32r_do_align (n, fill, len, max)
 {
   /* Only do this if the fill pattern wasn't specified.  */
   if (fill == NULL
-      && (now_seg->flags & SEC_CODE) != 0
+      && subseg_text_p (now_seg)
       /* Only do this special handling if aligning to at least a
         4 byte boundary.  */
       && n > 1
index e21962c..2752d03 100644 (file)
@@ -2192,12 +2192,7 @@ sh_do_align (n, fill, len, max)
      int max;
 {
   if (fill == NULL
-#ifdef BFD_ASSEMBLER
-      && (now_seg->flags & SEC_CODE) != 0
-#else
-      && now_seg != data_section
-      && now_seg != bss_section
-#endif
+      && subseg_text_p (now_seg)
       && n > 1)
     {
       static const unsigned char big_nop_pattern[] = { 0x00, 0x09 };
index 2a05764..d5031f6 100644 (file)
@@ -57,7 +57,7 @@ extern int sparc_pic_code;
 
 #define md_do_align(n, fill, len, max, around)                         \
 if ((n) && (n) <= 10 && !need_pass_2 && !(fill)                                \
-    && now_seg != data_section && now_seg != bss_section)              \
+    && subseg_text_p (now_seg))                                                \
   {                                                                    \
     char *p;                                                           \
     p = frag_var (rs_align_code, 1 << n, 1, (relax_substateT) 1024,    \
index 9b57438..bd471ff 100644 (file)
@@ -1173,21 +1173,7 @@ do_align (n, fill, len, max)
 
   if (fill == NULL)
     {
-      int maybe_text;
-
-#ifdef BFD_ASSEMBLER
-      if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
-       maybe_text = 1;
-      else
-       maybe_text = 0;
-#else
-      if (now_seg != data_section && now_seg != bss_section)
-       maybe_text = 1;
-      else
-       maybe_text = 0;
-#endif
-
-      if (maybe_text)
+      if (subseg_text_p (now_seg))
        default_fill = NOP_OPCODE;
       else
        default_fill = 0;
index 70dda27..a8e4b4b 100644 (file)
@@ -564,6 +564,21 @@ section_symbol (sec)
 
 #endif /* BFD_ASSEMBLER */
 
+/* Return whether the specified segment is thought to hold text.  */
+
+int
+subseg_text_p (sec)
+     segT sec;
+{
+#ifdef BFD_ASSEMBLER
+  return (bfd_get_section_flags (stdoutput, sec) & SEC_CODE) != 0;
+#else
+  return (sec != data_section
+         && sec != bss_section
+         && strcmp (segment_name (sec), ".eh_frame") != 0);
+#endif
+}
+
 void
 subsegs_print_statistics (file)
      FILE *file;
index cd74c70..3a49234 100644 (file)
@@ -1372,7 +1372,8 @@ subsegs_finish ()
          any alignment is meaningless, and, moreover, will look weird
          if we are generating a listing.  */
       frag_align (had_errors () ? 0 : SUB_SEGMENT_ALIGN (now_seg),
-                 NOP_OPCODE, 0);
+                 subseg_text_p (now_seg) ? NOP_OPCODE : 0,
+                 0);
 
       /* frag_align will have left a new frag.
         Use this last frag for an empty ".fill".