* doc/binutils.texi: Add -D/--enable-deterministic-archives option

to strip and objcopy.
	* objcopy.c (deterministic): New global variable.
	(strip_options): Add --enable-deterministic-archives.
	(copy_options): Likewise.
	(copy_usage): Likewise.
	(strip_usage): Likewise.
	(copy_archive): When stripping all, don't add archive map; set
	deterministic output when requested.
	(strip_main): Add -D/--enable-deterministic-archives option.
	(copy_main): Likewise.
This commit is contained in:
Cary Coutant
2012-04-25 17:50:14 +00:00
parent 50f042b9a1
commit 2e30cb575a
3 changed files with 49 additions and 1 deletions

View File

@ -1,3 +1,17 @@
2012-04-25 Cary Coutant <ccoutant@google.com>
* doc/binutils.texi: Add -D/--enable-deterministic-archives option
to strip and objcopy.
* objcopy.c (deterministic): New global variable.
(strip_options): Add --enable-deterministic-archives.
(copy_options): Likewise.
(copy_usage): Likewise.
(strip_usage): Likewise.
(copy_archive): When stripping all, don't add archive map; set
deterministic output when requested.
(strip_main): Add -D/--enable-deterministic-archives option.
(copy_main): Likewise.
2012-04-12 H.J. Lu <hongjiu.lu@intel.com> 2012-04-12 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/13947 PR binutils/13947

View File

@ -1059,6 +1059,7 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
[@option{-j} @var{sectionname}|@option{--only-section=}@var{sectionname}] [@option{-j} @var{sectionname}|@option{--only-section=}@var{sectionname}]
[@option{-R} @var{sectionname}|@option{--remove-section=}@var{sectionname}] [@option{-R} @var{sectionname}|@option{--remove-section=}@var{sectionname}]
[@option{-p}|@option{--preserve-dates}] [@option{-p}|@option{--preserve-dates}]
[@option{-D}|@option{--enable-deterministic-archives}]
[@option{--debugging}] [@option{--debugging}]
[@option{--gap-fill=}@var{val}] [@option{--gap-fill=}@var{val}]
[@option{--pad-to=}@var{address}] [@option{--pad-to=}@var{address}]
@ -1323,6 +1324,12 @@ commands. If the input was '12345678' then the outputs would be
Set the access and modification dates of the output file to be the same Set the access and modification dates of the output file to be the same
as those of the input file. as those of the input file.
@item -D
@itemx --enable-deterministic-archives
Operate in @emph{deterministic} mode. When copying archive members
and writing the archive index, use zero for UIDs, GIDs, timestamps,
and use consistent file modes for all files.
@item --debugging @item --debugging
Convert debugging information, if possible. This is not the default Convert debugging information, if possible. This is not the default
because only certain debugging formats are supported, and the because only certain debugging formats are supported, and the
@ -2679,6 +2686,7 @@ strip [@option{-F} @var{bfdname} |@option{--target=}@var{bfdname}]
[@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}] [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}]
[@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}] [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}]
[@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}] [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}]
[@option{-D}|@option{--enable-deterministic-archives}]
[@option{--keep-file-symbols}] [@option{--keep-file-symbols}]
[@option{--only-keep-debug}] [@option{--only-keep-debug}]
[@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}] [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}]
@ -2763,6 +2771,12 @@ argument may be specified.
@itemx --preserve-dates @itemx --preserve-dates
Preserve the access and modification dates of the file. Preserve the access and modification dates of the file.
@item -D
@itemx --enable-deterministic-archives
Operate in @emph{deterministic} mode. When copying archive members
and writing the archive index, use zero for UIDs, GIDs, timestamps,
and use consistent file modes for all files.
@item -w @item -w
@itemx --wildcard @itemx --wildcard
Permit regular expressions in @var{symbolname}s used in other command Permit regular expressions in @var{symbolname}s used in other command

View File

@ -86,6 +86,7 @@ static int copy_width = 1;
static bfd_boolean verbose; /* Print file and target names. */ static bfd_boolean verbose; /* Print file and target names. */
static bfd_boolean preserve_dates; /* Preserve input file timestamp. */ static bfd_boolean preserve_dates; /* Preserve input file timestamp. */
static bfd_boolean deterministic; /* Enable deterministic archives. */
static int status = 0; /* Exit status. */ static int status = 0; /* Exit status. */
enum strip_action enum strip_action
@ -322,6 +323,7 @@ static struct option strip_options[] =
{ {
{"discard-all", no_argument, 0, 'x'}, {"discard-all", no_argument, 0, 'x'},
{"discard-locals", no_argument, 0, 'X'}, {"discard-locals", no_argument, 0, 'X'},
{"enable-deterministic-archives", no_argument, 0, 'D'},
{"format", required_argument, 0, 'F'}, /* Obsolete */ {"format", required_argument, 0, 'F'}, /* Obsolete */
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
{"info", no_argument, 0, OPTION_FORMATS_INFO}, {"info", no_argument, 0, OPTION_FORMATS_INFO},
@ -371,6 +373,7 @@ static struct option copy_options[] =
{"decompress-debug-sections", no_argument, 0, OPTION_DECOMPRESS_DEBUG_SECTIONS}, {"decompress-debug-sections", no_argument, 0, OPTION_DECOMPRESS_DEBUG_SECTIONS},
{"discard-all", no_argument, 0, 'x'}, {"discard-all", no_argument, 0, 'x'},
{"discard-locals", no_argument, 0, 'X'}, {"discard-locals", no_argument, 0, 'X'},
{"enable-deterministic-archives", no_argument, 0, 'D'},
{"extract-symbol", no_argument, 0, OPTION_EXTRACT_SYMBOL}, {"extract-symbol", no_argument, 0, OPTION_EXTRACT_SYMBOL},
{"format", required_argument, 0, 'F'}, /* Obsolete */ {"format", required_argument, 0, 'F'}, /* Obsolete */
{"gap-fill", required_argument, 0, OPTION_GAP_FILL}, {"gap-fill", required_argument, 0, OPTION_GAP_FILL},
@ -480,6 +483,8 @@ copy_usage (FILE *stream, int exit_status)
-F --target <bfdname> Set both input and output format to <bfdname>\n\ -F --target <bfdname> Set both input and output format to <bfdname>\n\
--debugging Convert debugging information, if possible\n\ --debugging Convert debugging information, if possible\n\
-p --preserve-dates Copy modified/access timestamps to the output\n\ -p --preserve-dates Copy modified/access timestamps to the output\n\
-D --enable-deterministic-archives\n\
Produce deterministic output when stripping archives\n\
-j --only-section <name> Only copy section <name> into the output\n\ -j --only-section <name> Only copy section <name> into the output\n\
--add-gnu-debuglink=<file> Add section .gnu_debuglink linking to <file>\n\ --add-gnu-debuglink=<file> Add section .gnu_debuglink linking to <file>\n\
-R --remove-section <name> Remove section <name> from the output\n\ -R --remove-section <name> Remove section <name> from the output\n\
@ -588,6 +593,8 @@ strip_usage (FILE *stream, int exit_status)
-O --output-target=<bfdname> Create an output file in format <bfdname>\n\ -O --output-target=<bfdname> Create an output file in format <bfdname>\n\
-F --target=<bfdname> Set both input and output format to <bfdname>\n\ -F --target=<bfdname> Set both input and output format to <bfdname>\n\
-p --preserve-dates Copy modified/access timestamps to the output\n\ -p --preserve-dates Copy modified/access timestamps to the output\n\
-D --enable-deterministic-archives\n\
Produce deterministic output when stripping archives\n\
-R --remove-section=<name> Remove section <name> from the output\n\ -R --remove-section=<name> Remove section <name> from the output\n\
-s --strip-all Remove all symbol and relocation information\n\ -s --strip-all Remove all symbol and relocation information\n\
-g -S -d --strip-debug Remove all debugging symbols & sections\n\ -g -S -d --strip-debug Remove all debugging symbols & sections\n\
@ -2030,9 +2037,15 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
fatal (_("cannot create tempdir for archive copying (error: %s)"), fatal (_("cannot create tempdir for archive copying (error: %s)"),
strerror (errno)); strerror (errno));
obfd->has_armap = ibfd->has_armap; if (strip_symbols == STRIP_ALL)
obfd->has_armap = FALSE;
else
obfd->has_armap = ibfd->has_armap;
obfd->is_thin_archive = ibfd->is_thin_archive; obfd->is_thin_archive = ibfd->is_thin_archive;
if (deterministic)
obfd->flags |= BFD_DETERMINISTIC_OUTPUT;
list = NULL; list = NULL;
this_element = bfd_openr_next_archived_file (ibfd, NULL); this_element = bfd_openr_next_archived_file (ibfd, NULL);
@ -3024,6 +3037,9 @@ strip_main (int argc, char *argv[])
case 'p': case 'p':
preserve_dates = TRUE; preserve_dates = TRUE;
break; break;
case 'D':
deterministic = TRUE;
break;
case 'x': case 'x':
discard_locals = LOCALS_ALL; discard_locals = LOCALS_ALL;
break; break;
@ -3384,6 +3400,10 @@ copy_main (int argc, char *argv[])
preserve_dates = TRUE; preserve_dates = TRUE;
break; break;
case 'D':
deterministic = TRUE;
break;
case 'w': case 'w':
wildcard = TRUE; wildcard = TRUE;
break; break;