aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-04-09 10:56:28 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-04-09 10:56:28 -0700
commitcd6faa73f8e3b888ee8b73a733382a5587aca202 (patch)
tree7064b68458f5256b96583af2a6f997e27131972a
parent19424843891a0b9b0f9c2532cb7251813c4a8cf9 (diff)
downloadgdb-cd6faa73f8e3b888ee8b73a733382a5587aca202.zip
gdb-cd6faa73f8e3b888ee8b73a733382a5587aca202.tar.gz
gdb-cd6faa73f8e3b888ee8b73a733382a5587aca202.tar.bz2
Properly check --compress-debug-sections=XXX
We can't check if input is ELF in copy_file since some targets may only set xvec after bfd_check_format_matches is called. This patch moves this check to copy_object. bfd/ * elfxx-target.h (TARGET_BIG_SYM): Add BFD_COMPRESS_GABI to object_flags. (TARGET_LITTLE_SYM): Likewise. binutils/ * objcopy.c (do_debug_sections): Use bit patterns. (copy_object): Return FALSE for compress_zlib, compress_gnu_zlib and compress_gabi_zlib on non-ELF input. (copy_file): Don't check non-ELF input here.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elfxx-target.h6
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/objcopy.c33
4 files changed, 36 insertions, 16 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9e91490..47e5024 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2015-04-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elfxx-target.h (TARGET_BIG_SYM): Add BFD_COMPRESS_GABI to
+ object_flags.
+ (TARGET_LITTLE_SYM): Likewise.
+
2015-04-09 Max Filippov <jcmvbkbc@gmail.com>
* elf32-xtensa.c (splay-tree.h): include header.
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 5623662..0085d6c 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -835,7 +835,8 @@ const bfd_target TARGET_BIG_SYM =
/* object_flags: mask of all file flags */
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
- | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+ | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
+ | BFD_COMPRESS_GABI),
/* section_flags: mask of all section flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
@@ -933,7 +934,8 @@ const bfd_target TARGET_LITTLE_SYM =
/* object_flags: mask of all file flags */
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
- | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
+ | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
+ | BFD_COMPRESS_GABI),
/* section_flags: mask of all section flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index b2a81e5..bd2c715 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2015-04-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ * objcopy.c (do_debug_sections): Use bit patterns.
+ (copy_object): Return FALSE for compress_zlib, compress_gnu_zlib
+ and compress_gabi_zlib on non-ELF input.
+ (copy_file): Don't check non-ELF input here.
+
2015-04-09 Nick Clifton <nickc@redhat.com>
* readelf.c (get_machine_flags): Report the setting of the string
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index a0452c9..f7fc814 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -202,12 +202,12 @@ static bfd_boolean convert_debugging = FALSE;
/* Whether to compress/decompress DWARF debug sections. */
static enum
{
- nothing,
- compress,
- compress_zlib,
- compress_gnu_zlib,
- compress_gabi_zlib,
- decompress
+ nothing = 0,
+ compress = 1 << 0,
+ compress_zlib = compress | 1 << 1,
+ compress_gnu_zlib = compress | 1 << 2,
+ compress_gabi_zlib = compress | 1 << 3,
+ decompress = 1 << 4
} do_debug_sections = nothing;
/* Whether to change the leading character in symbol names. */
@@ -1664,6 +1664,15 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
return FALSE;
}
+ if ((do_debug_sections & compress) != 0
+ && do_debug_sections != compress
+ && ibfd->xvec->flavour != bfd_target_elf_flavour)
+ {
+ non_fatal (_("--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported on `%s'"),
+ bfd_get_archive_filename (ibfd));
+ return FALSE;
+ }
+
if (verbose)
printf (_("copy from `%s' [%s] to `%s' [%s]\n"),
bfd_get_archive_filename (ibfd), bfd_get_target (ibfd),
@@ -2596,14 +2605,10 @@ copy_file (const char *input_filename, const char *output_filename,
case compress_gnu_zlib:
case compress_gabi_zlib:
ibfd->flags |= BFD_COMPRESS;
- if (do_debug_sections != compress)
- {
- if (ibfd->xvec->flavour != bfd_target_elf_flavour)
- fatal (_("--compress-debug-sections=[zlib|zlib-gnu|zlib-gabi] is unsupported for `%s'"),
- bfd_get_target (ibfd));
- if (do_debug_sections == compress_gabi_zlib)
- ibfd->flags |= BFD_COMPRESS_GABI;
- }
+ /* Don't check if input is ELF here since this information is
+ only available after bfd_check_format_matches is called. */
+ if (do_debug_sections == compress_gabi_zlib)
+ ibfd->flags |= BFD_COMPRESS_GABI;
break;
case decompress:
ibfd->flags |= BFD_DECOMPRESS;