From: H.J. Lu Date: Thu, 9 Apr 2015 17:56:28 +0000 (-0700) Subject: Properly check --compress-debug-sections=XXX X-Git-Tag: gdb-7.10-release~868 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cd6faa73f8e3b888ee8b73a733382a5587aca202;p=external%2Fbinutils.git 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. --- 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 + + * elfxx-target.h (TARGET_BIG_SYM): Add BFD_COMPRESS_GABI to + object_flags. + (TARGET_LITTLE_SYM): Likewise. + 2015-04-09 Max Filippov * 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 + + * 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 * 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;