Change the default behaviour of the PE targeted linker so that timestamps are
inserted. This is for compatibility with other, non-GNU tools. Deterministic binaries can still be created by using the new --no-insert-timestamp command line option. * emultempl/pe.em: Initialise insert_timestamp to true. Add a --no-insert-timestamp command line option. * emultempl/pep.em: Likewise. * ld.texinfo: Document that --insert-timestamp is enabled by default and that it now has an inverse command line option. * NEWS: Mention the new behaviour.
This commit is contained in:
parent
df565f326e
commit
eeb14e5a5b
5 changed files with 37 additions and 8 deletions
|
@ -1,3 +1,12 @@
|
|||
2014-06-26 Linda Zhang <lindasc@qq.com>
|
||||
|
||||
* emultempl/pe.em: Initialise insert_timestamp to true.
|
||||
Add a --no-insert-timestamp command line option.
|
||||
* emultempl/pep.em: Likewise.
|
||||
* ld.texinfo: Document that --insert-timestamp is enabled by
|
||||
default and that it now has an inverse command line option.
|
||||
* NEWS: Mention the new behaviour.
|
||||
|
||||
2014-06-25 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* Makefile.am (ALL_EMULATION_SOURCES): Move ei386pep.c from
|
||||
|
|
4
ld/NEWS
4
ld/NEWS
|
@ -1,5 +1,9 @@
|
|||
-*- text -*-
|
||||
|
||||
* PE binaries now once again contain real timestamps by default. To disable
|
||||
the inclusion of a timestamp in a PE binary, use the --no-insert-timestamp
|
||||
command line option.
|
||||
|
||||
* Replace support for openrisc and or32 with support for or1k.
|
||||
|
||||
* Add support for the --build-id command line option to COFF based targets.
|
||||
|
|
|
@ -132,7 +132,7 @@ static int support_old_code = 0;
|
|||
static char * thumb_entry_symbol = NULL;
|
||||
static lang_assignment_statement_type *image_base_statement = 0;
|
||||
static unsigned short pe_dll_characteristics = 0;
|
||||
static bfd_boolean insert_timestamp = FALSE;
|
||||
static bfd_boolean insert_timestamp = TRUE;
|
||||
static const char *emit_build_id;
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
|
@ -272,7 +272,8 @@ fragment <<EOF
|
|||
#define OPTION_TERMINAL_SERVER_AWARE (OPTION_WDM_DRIVER + 1)
|
||||
/* Determinism. */
|
||||
#define OPTION_INSERT_TIMESTAMP (OPTION_TERMINAL_SERVER_AWARE + 1)
|
||||
#define OPTION_BUILD_ID (OPTION_INSERT_TIMESTAMP + 1)
|
||||
#define OPTION_NO_INSERT_TIMESTAMP (OPTION_INSERT_TIMESTAMP + 1)
|
||||
#define OPTION_BUILD_ID (OPTION_NO_INSERT_TIMESTAMP + 1)
|
||||
|
||||
static void
|
||||
gld${EMULATION_NAME}_add_options
|
||||
|
@ -307,6 +308,7 @@ gld${EMULATION_NAME}_add_options
|
|||
{"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
|
||||
{"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
|
||||
{"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
|
||||
{"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP},
|
||||
#ifdef DLL_SUPPORT
|
||||
/* getopt allows abbreviations, so we do this to stop it
|
||||
from treating -o as an abbreviation for this option. */
|
||||
|
@ -445,7 +447,7 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
|
|||
fprintf (file, _(" --support-old-code Support interworking with old code\n"));
|
||||
fprintf (file, _(" --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"));
|
||||
fprintf (file, _(" --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"));
|
||||
fprintf (file, _(" --insert-timestamp Use a real timestamp rather than zero.\n"));
|
||||
fprintf (file, _(" --[no-]insert-timestamp Use a real timestamp rather than zero (default).\n"));
|
||||
fprintf (file, _(" This makes binaries non-deterministic\n"));
|
||||
#ifdef DLL_SUPPORT
|
||||
fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
|
||||
|
@ -769,6 +771,9 @@ gld${EMULATION_NAME}_handle_option (int optc)
|
|||
case OPTION_INSERT_TIMESTAMP:
|
||||
insert_timestamp = TRUE;
|
||||
break;
|
||||
case OPTION_NO_INSERT_TIMESTAMP:
|
||||
insert_timestamp = FALSE;
|
||||
break;
|
||||
#ifdef DLL_SUPPORT
|
||||
case OPTION_OUT_DEF:
|
||||
pe_out_def_filename = xstrdup (optarg);
|
||||
|
|
|
@ -147,7 +147,7 @@ static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE;
|
|||
static int support_old_code = 0;
|
||||
static lang_assignment_statement_type *image_base_statement = 0;
|
||||
static unsigned short pe_dll_characteristics = 0;
|
||||
static bfd_boolean insert_timestamp = FALSE;
|
||||
static bfd_boolean insert_timestamp = TRUE;
|
||||
static const char *emit_build_id;
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
|
@ -245,6 +245,7 @@ enum options
|
|||
OPTION_NO_BIND,
|
||||
OPTION_WDM_DRIVER,
|
||||
OPTION_INSERT_TIMESTAMP,
|
||||
OPTION_NO_INSERT_TIMESTAMP,
|
||||
OPTION_TERMINAL_SERVER_AWARE,
|
||||
OPTION_BUILD_ID
|
||||
};
|
||||
|
@ -322,6 +323,7 @@ gld${EMULATION_NAME}_add_options
|
|||
{"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
|
||||
{"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
|
||||
{"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
|
||||
{"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP},
|
||||
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
|
||||
{NULL, no_argument, NULL, 0}
|
||||
};
|
||||
|
@ -409,7 +411,7 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
|
|||
fprintf (file, _(" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"));
|
||||
fprintf (file, _(" --support-old-code Support interworking with old code\n"));
|
||||
fprintf (file, _(" --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"));
|
||||
fprintf (file, _(" --insert-timestamp Use a real timestamp rather than zero.\n"));
|
||||
fprintf (file, _(" --[no-]insert-timestamp Use a real timestamp rather than zero. (default)\n"));
|
||||
fprintf (file, _(" This makes binaries non-deterministic\n"));
|
||||
#ifdef DLL_SUPPORT
|
||||
fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
|
||||
|
@ -721,6 +723,9 @@ gld${EMULATION_NAME}_handle_option (int optc)
|
|||
case OPTION_INSERT_TIMESTAMP:
|
||||
insert_timestamp = TRUE;
|
||||
break;
|
||||
case OPTION_NO_INSERT_TIMESTAMP:
|
||||
insert_timestamp = FALSE;
|
||||
break;
|
||||
#ifdef DLL_SUPPORT
|
||||
case OPTION_OUT_DEF:
|
||||
pep_out_def_filename = xstrdup (optarg);
|
||||
|
|
|
@ -2665,9 +2665,15 @@ The image is Terminal Server aware.
|
|||
|
||||
@kindex --insert-timestamp
|
||||
@item --insert-timestamp
|
||||
Insert a real timestamp into the image, rather than the default value
|
||||
of zero. This will result in a slightly different results with each
|
||||
invocation, which could be helpful for distributing unique images.
|
||||
@itemx --no-insert-timestamp
|
||||
Insert a real timestamp into the image. This is the default behaviour
|
||||
as it matches legacy code and it means that the image will work with
|
||||
other, proprietary tools. The problem with this default is that it
|
||||
will result in slightly different images being produced each tiem the
|
||||
same sources are linked. The option @option{--no-insert-timestamp}
|
||||
can be used to insert a zero value for the timestamp, this ensuring
|
||||
that binaries produced from indentical sources will compare
|
||||
identically.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
|
|
Loading…
Reference in a new issue