From eeb14e5a5b378450ca2ed139e76f317f491f4613 Mon Sep 17 00:00:00 2001 From: Linda Zhang Date: Thu, 26 Jun 2014 12:18:39 +0100 Subject: [PATCH] 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. --- ld/ChangeLog | 9 +++++++++ ld/NEWS | 4 ++++ ld/emultempl/pe.em | 11 ++++++++--- ld/emultempl/pep.em | 9 +++++++-- ld/ld.texinfo | 12 +++++++++--- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 5a1fe277085..f42d00bf1a0 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2014-06-26 Linda Zhang + + * 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 * Makefile.am (ALL_EMULATION_SOURCES): Move ei386pep.c from diff --git a/ld/NEWS b/ld/NEWS index 344f98d8a91..a8b4ab46a7b 100644 --- a/ld/NEWS +++ b/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. diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index 0466eb3f631..7a5b77bf9b2 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -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 < Set the entry point to be Thumb \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); diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index 6e3ecd80011..916a786da0f 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -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 [:] 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); diff --git a/ld/ld.texinfo b/ld/ld.texinfo index e3d046941a8..5762dc6e360 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -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 -- 2.30.2