]> git.pld-linux.org Git - packages/binutils.git/commitdiff
- rel 3; upstream fix for noop on < i686; run test suite auto/th/binutils-2_22_52_0_1-3 auto/ti/binutils-2_22_52_0_1-3
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sat, 11 Feb 2012 09:20:28 +0000 (09:20 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    binutils-bug-13675.patch -> 1.1
    binutils-i586_nop.patch -> 1.2
    binutils.spec -> 1.357

binutils-bug-13675.patch [new file with mode: 0644]
binutils-i586_nop.patch [deleted file]
binutils.spec

diff --git a/binutils-bug-13675.patch b/binutils-bug-13675.patch
new file mode 100644 (file)
index 0000000..3fe1fe6
--- /dev/null
@@ -0,0 +1,280 @@
+commit 7eb902bc9272afb419ab6fc5699eb7ed8beb104b
+Author: H.J. Lu <hjl.tools@gmail.com>
+Date:   Thu Feb 9 22:51:57 2012 +0000
+
+    Don't use multi byte nop instructions for i386
+    
+    bfd/
+    
+    2012-02-09  H.J. Lu  <hongjiu.lu@intel.com>
+    
+       PR ld/13675
+       * cpu-i386.c (bfd_arch_i386_fill): Updated to support multi byte
+       nop instructions.
+       (bfd_arch_i386_short_nop_fill): New.
+       (bfd_arch_i386_long_nop_fill): Likewise.
+       Use bfd_arch_i386_short_nop_fill in 32bit bfd_arch_info
+       initializers.  Use bfd_arch_i386_long_nop_fill on 64bit
+       bfd_arch_info initializers.
+    
+       * cpu-k1om.c (bfd_arch_i386_fill): Renamed to ...
+       (bfd_arch_i386_short_nop_fill): This.
+       Update bfd_arch_info initializers.
+       * cpu-l1om.c: Likewise.
+    
+    ld/testsuite/
+    
+    2012-02-09  H.J. Lu  <hongjiu.lu@intel.com>
+    
+       PR ld/13675
+       * ld-i386/tlsnopic.dd: Update no-op padding.
+       * ld-i386/tlspic.dd: Likewise.
+
+diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c
+index f8991cf..4cb59ed 100644
+--- a/bfd/cpu-i386.c
++++ b/bfd/cpu-i386.c
+@@ -25,7 +25,8 @@
+ #include "libbfd.h"
+ #include "libiberty.h"
+-extern void * bfd_arch_i386_fill (bfd_size_type, bfd_boolean, bfd_boolean);
++extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
++                                          bfd_boolean);
+ static const bfd_arch_info_type *
+ bfd_i386_compatible (const bfd_arch_info_type *a,
+@@ -41,16 +42,16 @@ bfd_i386_compatible (const bfd_arch_info_type *a,
+   return compat;
+ }
+-/* Fill the buffer with zero or nop instruction if CODE is TRUE.  */
++/* Fill the buffer with zero or nop instruction if CODE is TRUE.  Use
++   multi byte nop instructions if LONG_NOP is TRUE.  */
+-void *
+-bfd_arch_i386_fill (bfd_size_type count,
+-                  bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
+-                  bfd_boolean code)
++static void *
++bfd_arch_i386_fill (bfd_size_type count, bfd_boolean code,
++                  bfd_boolean long_nop)
+ {
+   /* nop */
+   static const char nop_1[] = { 0x90 };       
+-  /* nopw */
++  /* xchg %ax,%ax */
+   static const char nop_2[] = { 0x66, 0x90 };
+   /* nopl (%[re]ax) */
+   static const char nop_3[] = { 0x0f, 0x1f, 0x00 };
+@@ -74,6 +75,7 @@ bfd_arch_i386_fill (bfd_size_type count,
+   static const char *const nops[] =
+     { nop_1, nop_2, nop_3, nop_4, nop_5,
+       nop_6, nop_7, nop_8, nop_9, nop_10 };
++  bfd_size_type nop_size = long_nop ? ARRAY_SIZE (nops) : 2;
+   void *fill = bfd_malloc (count);
+   if (fill == NULL)
+@@ -82,11 +84,11 @@ bfd_arch_i386_fill (bfd_size_type count,
+   if (code)
+     {
+       bfd_byte *p = fill;
+-      while (count >= ARRAY_SIZE (nops))
++      while (count >= nop_size)
+       {
+-        memcpy (p, nops[ARRAY_SIZE (nops) - 1], ARRAY_SIZE (nops));
+-        p += ARRAY_SIZE (nops);
+-        count -= ARRAY_SIZE (nops);
++        memcpy (p, nops[nop_size - 1], nop_size);
++        p += nop_size;
++        count -= nop_size;
+       }
+       if (count != 0)
+       memcpy (p, nops[count - 1], count);
+@@ -97,6 +99,26 @@ bfd_arch_i386_fill (bfd_size_type count,
+   return fill;
+ }
++/* Fill the buffer with zero or short nop instruction if CODE is TRUE.  */
++
++void *
++bfd_arch_i386_short_nop_fill (bfd_size_type count,
++                            bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
++                            bfd_boolean code)
++{
++  return bfd_arch_i386_fill (count, code, FALSE);
++}
++
++/* Fill the buffer with zero or long nop instruction if CODE is TRUE.  */
++
++static void *
++bfd_arch_i386_long_nop_fill (bfd_size_type count,
++                           bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
++                           bfd_boolean code)
++{
++  return bfd_arch_i386_fill (count, code, TRUE);
++}
++
+ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
+ {
+   64, /* 64 bits in a word */
+@@ -110,7 +132,7 @@ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
+   FALSE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_long_nop_fill,
+   0
+ };
+@@ -127,7 +149,7 @@ static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
+   FALSE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_long_nop_fill,
+   &bfd_x64_32_arch_intel_syntax,
+ };
+@@ -144,7 +166,7 @@ static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
+   TRUE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   &bfd_x86_64_arch_intel_syntax
+ };
+@@ -161,7 +183,7 @@ static const bfd_arch_info_type i8086_arch =
+   FALSE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   &bfd_i386_arch_intel_syntax
+ };
+@@ -178,7 +200,7 @@ static const bfd_arch_info_type bfd_x64_32_arch =
+   FALSE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_long_nop_fill,
+   &i8086_arch
+ };
+@@ -195,7 +217,7 @@ static const bfd_arch_info_type bfd_x86_64_arch =
+   FALSE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_long_nop_fill,
+   &bfd_x64_32_arch
+ };
+@@ -212,6 +234,6 @@ const bfd_arch_info_type bfd_i386_arch =
+   TRUE,
+   bfd_i386_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   &bfd_x86_64_arch
+ };
+diff --git a/bfd/cpu-k1om.c b/bfd/cpu-k1om.c
+index f9958e4..54b6e58 100644
+--- a/bfd/cpu-k1om.c
++++ b/bfd/cpu-k1om.c
+@@ -23,7 +23,8 @@
+ #include "bfd.h"
+ #include "libbfd.h"
+-extern void * bfd_arch_i386_fill (bfd_size_type, bfd_boolean, bfd_boolean);
++extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
++                                          bfd_boolean);
+ static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
+ {
+@@ -38,7 +39,7 @@ static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
+   TRUE,
+   bfd_default_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   0
+ };
+@@ -55,6 +56,6 @@ const bfd_arch_info_type bfd_k1om_arch =
+   TRUE,
+   bfd_default_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   &bfd_k1om_arch_intel_syntax
+ };
+diff --git a/bfd/cpu-l1om.c b/bfd/cpu-l1om.c
+index 0fabd49..46ac3a0 100644
+--- a/bfd/cpu-l1om.c
++++ b/bfd/cpu-l1om.c
+@@ -23,7 +23,8 @@
+ #include "bfd.h"
+ #include "libbfd.h"
+-extern void * bfd_arch_i386_fill (bfd_size_type, bfd_boolean, bfd_boolean);
++extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
++                                          bfd_boolean);
+ static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
+ {
+@@ -38,7 +39,7 @@ static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
+   TRUE,
+   bfd_default_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   0
+ };
+@@ -55,6 +56,6 @@ const bfd_arch_info_type bfd_l1om_arch =
+   TRUE,
+   bfd_default_compatible,
+   bfd_default_scan,
+-  bfd_arch_i386_fill,
++  bfd_arch_i386_short_nop_fill,
+   &bfd_l1om_arch_intel_syntax
+ };
+diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
+index 037bfa0..b53cb8b 100644
+--- a/ld/testsuite/ChangeLog
++++ b/ld/testsuite/ChangeLog
+@@ -1,3 +1,9 @@
++2012-02-09  H.J. Lu  <hongjiu.lu@intel.com>
++
++      PR ld/13675
++      * ld-i386/tlsnopic.dd: Update no-op padding.
++      * ld-i386/tlspic.dd: Likewise. 
++
+ 2012-01-31  H.J. Lu  <hongjiu.lu@intel.com>
+       PR ld/13616
+diff --git a/ld/testsuite/ld-i386/tlsnopic.dd b/ld/testsuite/ld-i386/tlsnopic.dd
+index d6a16d0..027d288 100644
+--- a/ld/testsuite/ld-i386/tlsnopic.dd
++++ b/ld/testsuite/ld-i386/tlsnopic.dd
+@@ -156,4 +156,5 @@ Disassembly of section .text:
+     10ec:     8b 5d fc[       ]+mov    -0x4\(%ebp\),%ebx
+     10ef:     c9[     ]+leave *
+     10f0:     c3[     ]+ret *
+-    10f1:     0f 1f 00[       ]+nopl   \(%eax\)
++    10f1:     66 90[  ]+xchg   %ax,%ax
++    10f3:     90[     ]+nop
+diff --git a/ld/testsuite/ld-i386/tlspic.dd b/ld/testsuite/ld-i386/tlspic.dd
+index d85b385..ace06e6 100644
+--- a/ld/testsuite/ld-i386/tlspic.dd
++++ b/ld/testsuite/ld-i386/tlspic.dd
+@@ -406,4 +406,5 @@ Disassembly of section .text:
+  [0-9a-f]+:   8b 5d fc[       ]+mov    -0x4\(%ebp\),%ebx
+  [0-9a-f]+:   c9[     ]+leave *
+  [0-9a-f]+:   c3[     ]+ret *
+- [0-9a-f]+:   0f 1f 00[       ]+nopl   \(%eax\)
++ [0-9a-f]+:   66 90[  ]+xchg   %ax,%ax
++ [0-9a-f]+:   90[     ]+nop
diff --git a/binutils-i586_nop.patch b/binutils-i586_nop.patch
deleted file mode 100644 (file)
index 80feec4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -dur binutils-2.22.52.0.1.orig/bfd/cpu-i386.c binutils-2.22.52.0.1/bfd/cpu-i386.c
---- binutils-2.22.52.0.1.orig/bfd/cpu-i386.c   2012-02-01 00:46:04.000000000 +0100
-+++ binutils-2.22.52.0.1/bfd/cpu-i386.c        2012-02-09 10:14:16.627045230 +0100
-@@ -52,28 +52,7 @@
-   static const char nop_1[] = { 0x90 };       
-   /* nopw */
-   static const char nop_2[] = { 0x66, 0x90 };
--  /* nopl (%[re]ax) */
--  static const char nop_3[] = { 0x0f, 0x1f, 0x00 };
--  /* nopl 0(%[re]ax) */
--  static const char nop_4[] = { 0x0f, 0x1f, 0x40, 0x00 };
--  /* nopl 0(%[re]ax,%[re]ax,1) */
--  static const char nop_5[] = { 0x0f, 0x1f, 0x44, 0x00, 0x00 };
--  /* nopw 0(%[re]ax,%[re]ax,1) */
--  static const char nop_6[] = { 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00 };
--  /* nopl 0L(%[re]ax) */
--  static const char nop_7[] = { 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00 };
--  /* nopl 0L(%[re]ax,%[re]ax,1) */
--  static const char nop_8[] =
--    { 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00};
--  /* nopw 0L(%[re]ax,%[re]ax,1) */
--  static const char nop_9[] =
--    { 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
--  /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
--  static const char nop_10[] =
--    { 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
--  static const char *const nops[] =
--    { nop_1, nop_2, nop_3, nop_4, nop_5,
--      nop_6, nop_7, nop_8, nop_9, nop_10 };
-+  static const char *const nops[] = { nop_1, nop_2 };
-   void *fill = bfd_malloc (count);
-   if (fill == NULL)
index 24901cd8bc304fb21a4946ebf2a6394a5b936a77..5e9f18c0963484dbd1d8a808e7cdc0356607c438 100644 (file)
@@ -5,6 +5,7 @@
                                # http://sourceware.org/ml/binutils/2008-03/msg00162.html
 %bcond_without pax             # without PaX flags (for upstream bugreports)
 %bcond_without default_ld      # default ld instead of gold
+%bcond_without tests
 #
 Summary:       GNU Binary Utility Development Utilities
 Summary(de.UTF-8):     GNU Binary Utility Development Utilities
@@ -17,7 +18,7 @@ Summary(tr.UTF-8):    GNU geliştirme araçları
 Summary(uk.UTF-8):     Набір інструментів GNU для побудови виконуваних програм
 Name:          binutils
 Version:       2.22.52.0.1
-Release:       2
+Release:       3
 Epoch:         3
 License:       GPL v3+
 Group:         Development/Tools
@@ -36,7 +37,7 @@ Patch6:               %{name}-absolute-gnu_debuglink-path.patch
 Patch7:                %{name}-libtool-m.patch
 Patch8:                %{name}-build-id.patch
 Patch9:                %{name}-tooldir.patch
-Patch10:       %{name}-i586_nop.patch
+Patch10:       %{name}-bug-13675.patch
 Patch11:       %{name}-weakdef.patch
 URL:           http://sources.redhat.com/binutils/
 BuildRequires: autoconf >= 2.64
@@ -159,9 +160,7 @@ niektórych pakietów.
 %patch7 -p1
 %patch8 -p0
 %patch9 -p1
-%ifarch i386 i486 i586
 %patch10 -p1
-%endif
 %patch11 -p1
 
 # file contains hacks for ac 2.59 only
@@ -229,6 +228,8 @@ sparc32 \
 
 %{__make}
 
+%{?with_tests:%{__make} check}
+
 %install
 rm -rf $RPM_BUILD_ROOT
 
This page took 0.071596 seconds and 4 git commands to generate.