]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2003-06-09 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Jun 2003 06:46:34 +0000 (06:46 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Jun 2003 06:46:34 +0000 (06:46 +0000)
* NEWS: Updated for the new -n option for the i386 assembler.

* config/tc-i386.c (optimize_align_code): New.
(md_shortopts): Add 'n'.
(md_parse_option): Handle 'n'.
(md_show_usage): Add '-n'.

* config/tc-i386.h (optimize_align_code): Declared.
(md_do_align): Optimize code alignment only if optimize_align_code
is not 0.

* doc/as.texinfo: Add the new -n option.

* doc/c-i386.texi: Document the new -n option.

gas/ChangeLog
gas/NEWS
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/doc/as.texinfo
gas/doc/c-i386.texi

index 886933dafecc5fa02985d3f341a4e4094b2114b0..f98a487164b35e3900e2a6ec927aa3b1bc6a0a34 100644 (file)
@@ -1,3 +1,20 @@
+2003-06-09  H.J. Lu <hongjiu.lu@intel.com>
+
+       * NEWS: Updated for the new -n option for the i386 assembler.
+
+       * config/tc-i386.c (optimize_align_code): New.
+       (md_shortopts): Add 'n'.
+       (md_parse_option): Handle 'n'.
+       (md_show_usage): Add '-n'.
+
+       * config/tc-i386.h (optimize_align_code): Declared.
+       (md_do_align): Optimize code alignment only if optimize_align_code
+       is not 0.
+
+       * doc/as.texinfo: Add the new -n option.
+
+       * doc/c-i386.texi: Document the new -n option.
+
 2003-06-07  Richard Henderson  <rth@redhat.com>
 
        * doc/as.texinfo: Document .cfi_rel_offset.
index 46dfc1321f427dcf90f2ced7d22031206865479b..3393d9cc219f18b771af9520d55cafde755e5bc4 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,10 @@
 -*- text -*-
 
+* Added -n switch for x86 assembler.  By default, x86 GAS replaces
+  multiple nop instructions used for alignment within code sections
+  with multi-byte nop instructions such as leal 0(%esi,1),%esi.  This
+  switch disables the optimization.
+
 * Added support for MIPS32 Release 2.
 
 * Added support for Xtensa architecture.
index 4823ee7954610ed77106680a55900a1e3fcfed01..a10d9e69dea851b7cb4da258bcd4baeb4bc04986 100644 (file)
@@ -303,6 +303,9 @@ static int allow_naked_reg = 0;
    frame as in 32 bit mode.  */
 static char stackop_size = '\0';
 
+/* Non-zero to optimize code alignment.  */
+int optimize_align_code = 1;
+
 /* Non-zero to quieten some warnings.  */
 static int quiet_warnings = 0;
 
@@ -4889,9 +4892,9 @@ parse_register (reg_string, end_op)
 }
 \f
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
-const char *md_shortopts = "kVQ:sq";
+const char *md_shortopts = "kVQ:sqn";
 #else
-const char *md_shortopts = "q";
+const char *md_shortopts = "qn";
 #endif
 
 struct option md_longopts[] = {
@@ -4912,6 +4915,10 @@ md_parse_option (c, arg)
 {
   switch (c)
     {
+    case 'n':
+      optimize_align_code = 0;
+      break;
+
     case 'q':
       quiet_warnings = 1;
       break;
@@ -4973,10 +4980,12 @@ md_show_usage (stream)
   -Q                      ignored\n\
   -V                      print assembler version number\n\
   -k                      ignored\n\
+  -n                      Do not optimize code alignment\n\
   -q                      quieten some warnings\n\
   -s                      ignored\n"));
 #else
   fprintf (stream, _("\
+  -n                      Do not optimize code alignment\n\
   -q                      quieten some warnings\n"));
 #endif
 }
index f45d7131566cf12c4c7450fcaf43550741828882..295ccb98b2095f4bebeb08bb9e3aad819ad9db9b 100644 (file)
@@ -516,9 +516,14 @@ extern int tc_i386_fix_adjustable PARAMS ((struct fix *));
 extern const struct relax_type md_relax_table[];
 #define TC_GENERIC_RELAX_TABLE md_relax_table
 
+extern int optimize_align_code;
+
 #define md_do_align(n, fill, len, max, around)                         \
-if ((n) && !need_pass_2                                                        \
-    && (!(fill) || ((char)*(fill) == (char)0x90 && (len) == 1))                \
+if ((n)                                                                        \
+    && !need_pass_2                                                    \
+    && optimize_align_code                                             \
+    && (!(fill)                                                                \
+       || ((char)*(fill) == (char)0x90 && (len) == 1))                 \
     && subseg_text_p (now_seg))                                                \
   {                                                                    \
     frag_align_code ((n), (max));                                      \
index 9270da8e408c90d4aa484cb85961d656fc095a04..d37198a10a6e5d37989b3d0a38a686842bd0d28c 100644 (file)
@@ -332,7 +332,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
 @ifset I80386
 
 @emph{Target i386 options:}
-   [@b{--32}|@b{--64}]
+   [@b{--32}|@b{--64}] [@b{-n}]
 @end ifset
 @ifset I960
 
index 1527c8d78a148a91bcb9e4933998b8f21598616d..f0047f93825a063a6631aa1108d92e0bb1ce93e2 100644 (file)
@@ -61,6 +61,11 @@ These options are only available with the ELF object file format, and
 require that the necessary BFD support has been included (on a 32-bit
 platform you have to add --enable-64-bit-bfd to configure enable 64-bit
 usage and use x86-64 as target platform).
+
+@item -n
+By default, x86 GAS replaces multiple nop instructions used for
+alignment within code sections with multi-byte nop instructions such
+as leal 0(%esi,1),%esi.  This switch disables the optimization.
 @end table
 
 @node i386-Syntax