diff options
author | Roland McGrath <roland@gnu.org> | 2013-08-26 22:18:07 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2013-08-26 22:18:07 +0000 |
commit | 1098fd41ac4a8efe7ed5a96487e89f53ff79165d (patch) | |
tree | 335e249d045a56d407f6e7f051bc7e433c0fd20c /bfd | |
parent | 887badb310f11f59df2f6833a6bd0b219ba225a0 (diff) | |
download | gdb-1098fd41ac4a8efe7ed5a96487e89f53ff79165d.zip gdb-1098fd41ac4a8efe7ed5a96487e89f53ff79165d.tar.gz gdb-1098fd41ac4a8efe7ed5a96487e89f53ff79165d.tar.bz2 |
bfd/
* archures.c (bfd_mach_i386_nacl, bfd_mach_i386_i386_nacl): New macros.
(bfd_mach_x86_64_nacl, bfd_mach_x64_32_nacl): New macros.
* cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): New function.
(bfd_i386_nacl_arch): New variable.
(bfd_x86_64_nacl_arch, bfd_x64_32_nacl_arch): New variables.
(bfd_x64_32_arch_intel_syntax): Link them into the list.
* bfd-in2.h: Regenerate.
ld/
* emulparams/elf_i386_nacl.sh (ARCH): Set to i386:nacl.
* emulparams/elf_x86_64_nacl.sh (ARCH): Set to i386:x86-64:nacl.
* emulparams/elf32_x86_64_nacl.sh (ARCH): Set to i386:x64-32:nacl.
ld/testsuite/
* ld-x86-64/x86-64.exp (Mixed x86_64 and i386 input test 1):
Loosen string match to admit i386:x86-64*.
(Mixed x86_64 and i386 input test 2): Likewise.
* ld-x86-64/ilp32-2.d: Likewise.
* ld-x86-64/ilp32-3.d: Likewise.
* ld-x86-64/lp64-2.d: Likewise.
* ld-x86-64/lp64-3.d: Likewise.
* ld-x86-64/ia32-2.d: Likewise, and i386.* too.
* ld-x86-64/ia32-3.d: Likewise.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/archures.c | 4 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 6 | ||||
-rw-r--r-- | bfd/cpu-i386.c | 69 |
4 files changed, 86 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ebae60d..815503b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,15 @@ 2013-08-26 Roland McGrath <mcgrathr@google.com> + * archures.c (bfd_mach_i386_nacl, bfd_mach_i386_i386_nacl): New macros. + (bfd_mach_x86_64_nacl, bfd_mach_x64_32_nacl): New macros. + * cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): New function. + (bfd_i386_nacl_arch): New variable. + (bfd_x86_64_nacl_arch, bfd_x64_32_nacl_arch): New variables. + (bfd_x64_32_arch_intel_syntax): Link them into the list. + * bfd-in2.h: Regenerate. + +2013-08-26 Roland McGrath <mcgrathr@google.com> + * elf-nacl.c (nacl_modify_segment_map): Fix logic reordering the elf_segment_map list. If an executable segment is page-aligned but does not end with a full page, then append a fake section into diff --git a/bfd/archures.c b/bfd/archures.c index d00b0e1..53962bf 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -189,9 +189,13 @@ DESCRIPTION .#define bfd_mach_i386_i386 (1 << 2) .#define bfd_mach_x86_64 (1 << 3) .#define bfd_mach_x64_32 (1 << 4) +.#define bfd_mach_i386_nacl (1 << 5) .#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax) .#define bfd_mach_x86_64_intel_syntax (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax) .#define bfd_mach_x64_32_intel_syntax (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax) +.#define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) +.#define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) +.#define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) . bfd_arch_l1om, {* Intel L1OM *} .#define bfd_mach_l1om (1 << 5) .#define bfd_mach_l1om_intel_syntax (bfd_mach_l1om | bfd_mach_i386_intel_syntax) diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 0cf9a29..41f7a68 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -7,7 +7,7 @@ /* Main header file for the bfd library -- portable access to object files. - Copyright 1990-2013 2013 Free Software Foundation, Inc. + Copyright 1990-2013 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -1944,9 +1944,13 @@ enum bfd_architecture #define bfd_mach_i386_i386 (1 << 2) #define bfd_mach_x86_64 (1 << 3) #define bfd_mach_x64_32 (1 << 4) +#define bfd_mach_i386_nacl (1 << 5) #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax) #define bfd_mach_x86_64_intel_syntax (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax) #define bfd_mach_x64_32_intel_syntax (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax) +#define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) +#define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) +#define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) bfd_arch_l1om, /* Intel L1OM */ #define bfd_mach_l1om (1 << 5) #define bfd_mach_l1om_intel_syntax (bfd_mach_l1om | bfd_mach_i386_intel_syntax) diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c index 6174612..2a6bb97 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. @@ -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 = |