Index: bfd/cpu-i386.c |
diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c |
index 4cb59ed8981527ac94896d8054184c97bf96f9ad..2a6bb97b944b37dbde728a07b937928a839e38ee 100644 |
--- a/bfd/cpu-i386.c |
+++ b/bfd/cpu-i386.c |
@@ -1,6 +1,6 @@ |
/* BFD support for the Intel 386 architecture. |
Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2005, |
- 2007, 2009, 2010, 2011 |
+ 2007, 2009, 2010, 2011, 2013 |
Free Software Foundation, Inc. |
This file is part of BFD, the Binary File Descriptor library. |
@@ -50,7 +50,7 @@ bfd_arch_i386_fill (bfd_size_type count, bfd_boolean code, |
bfd_boolean long_nop) |
{ |
/* nop */ |
- static const char nop_1[] = { 0x90 }; |
+ static const char nop_1[] = { 0x90 }; |
/* xchg %ax,%ax */ |
static const char nop_2[] = { 0x66, 0x90 }; |
/* nopl (%[re]ax) */ |
@@ -119,6 +119,71 @@ bfd_arch_i386_long_nop_fill (bfd_size_type count, |
return bfd_arch_i386_fill (count, code, TRUE); |
} |
+/* Fill the buffer with zero, or one-byte nop instructions if CODE is TRUE. */ |
+ |
+static void * |
+bfd_arch_i386_onebyte_nop_fill (bfd_size_type count, |
+ bfd_boolean is_bigendian ATTRIBUTE_UNUSED, |
+ bfd_boolean code) |
+{ |
+ void *fill = bfd_malloc (count); |
+ if (fill != NULL) |
+ memset (fill, code ? 0x90 : 0, count); |
+ return fill; |
+} |
+ |
+ |
+static const bfd_arch_info_type bfd_x64_32_nacl_arch = |
+{ |
+ 64, /* 64 bits in a word */ |
+ 64, /* 64 bits in an address */ |
+ 8, /* 8 bits in a byte */ |
+ bfd_arch_i386, |
+ bfd_mach_x64_32_nacl, |
+ "i386", |
+ "i386:x64-32:nacl", |
+ 3, |
+ FALSE, |
+ bfd_i386_compatible, |
+ bfd_default_scan, |
+ bfd_arch_i386_onebyte_nop_fill, |
+ NULL |
+}; |
+ |
+static const bfd_arch_info_type bfd_x86_64_nacl_arch = |
+{ |
+ 64, /* 64 bits in a word */ |
+ 64, /* 64 bits in an address */ |
+ 8, /* 8 bits in a byte */ |
+ bfd_arch_i386, |
+ bfd_mach_x86_64_nacl, |
+ "i386", |
+ "i386:x86-64:nacl", |
+ 3, |
+ FALSE, |
+ bfd_i386_compatible, |
+ bfd_default_scan, |
+ bfd_arch_i386_onebyte_nop_fill, |
+ &bfd_x64_32_nacl_arch |
+}; |
+ |
+const bfd_arch_info_type bfd_i386_nacl_arch = |
+{ |
+ 32, /* 32 bits in a word */ |
+ 32, /* 32 bits in an address */ |
+ 8, /* 8 bits in a byte */ |
+ bfd_arch_i386, |
+ bfd_mach_i386_i386_nacl, |
+ "i386", |
+ "i386:nacl", |
+ 3, |
+ TRUE, |
+ bfd_i386_compatible, |
+ bfd_default_scan, |
+ bfd_arch_i386_onebyte_nop_fill, |
+ &bfd_x86_64_nacl_arch |
+}; |
+ |
static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax = |
{ |
64, /* 64 bits in a word */ |
@@ -133,7 +198,7 @@ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax = |
bfd_i386_compatible, |
bfd_default_scan, |
bfd_arch_i386_long_nop_fill, |
- 0 |
+ &bfd_i386_nacl_arch |
}; |
static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax = |