Commit 15b6cd19 authored by Nick Clifton's avatar Nick Clifton

* windres.c (define_resource): Use zero for timestamp, making

	output deterministic. time.h include is no longer needed.
	* resres.c (res_append_resource): Likewise.

	* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
	* libcoff.h: Regenerate.
	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Only use a real
	timestamp if --insert-timestamp was used.

	* pe-dll.c (fill_edata): Only use a real timestamp if
	--insert-timestamp was used.
	* emultempl/pe.em: Add the --insert-timestamp option.
	* emultempl/pep.em: Likewise for 64bit.
	* ld.texinfo: Document the --insert-timestamp option.
parent 579cbc8d
2013-11-22 Cory Fields <cory@coryfields.com>
* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
* libcoff.h: Regenerate.
* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Only use a real
timestamp if --insert-timestamp was used.
2013-11-19 Roland McGrath <mcgrathr@google.com> 2013-11-19 Roland McGrath <mcgrathr@google.com>
* elf-nacl.c (nacl_modify_segment_map): Calculate SIZEOF_HEADERS * elf-nacl.c (nacl_modify_segment_map): Calculate SIZEOF_HEADERS
......
/* BFD COFF object file private structure. /* BFD COFF object file private structure.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright 1990-2013 Free Software Foundation, Inc.
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
...@@ -118,6 +116,7 @@ typedef struct pe_tdata ...@@ -118,6 +116,7 @@ typedef struct pe_tdata
int dll; int dll;
int has_reloc_section; int has_reloc_section;
int dont_strip_reloc; int dont_strip_reloc;
bfd_boolean insert_timestamp;
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
flagword real_flags; flagword real_flags;
} pe_data_type; } pe_data_type;
......
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
Run "make headers" in your build bfd/ to regenerate. */ Run "make headers" in your build bfd/ to regenerate. */
/* BFD COFF object file private structure. /* BFD COFF object file private structure.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright 1990-2013 Free Software Foundation, Inc.
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
...@@ -122,6 +120,7 @@ typedef struct pe_tdata ...@@ -122,6 +120,7 @@ typedef struct pe_tdata
int dll; int dll;
int has_reloc_section; int has_reloc_section;
int dont_strip_reloc; int dont_strip_reloc;
bfd_boolean insert_timestamp;
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
flagword real_flags; flagword real_flags;
} pe_data_type; } pe_data_type;
......
/* Support for the generic parts of PE/PEI; the common executable parts. /* Support for the generic parts of PE/PEI; the common executable parts.
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, Copyright 1995-2013 Free Software Foundation, Inc.
2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Written by Cygnus Solutions. Written by Cygnus Solutions.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
...@@ -793,7 +792,10 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out) ...@@ -793,7 +792,10 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out)
H_PUT_16 (abfd, filehdr_in->f_magic, filehdr_out->f_magic); H_PUT_16 (abfd, filehdr_in->f_magic, filehdr_out->f_magic);
H_PUT_16 (abfd, filehdr_in->f_nscns, filehdr_out->f_nscns); H_PUT_16 (abfd, filehdr_in->f_nscns, filehdr_out->f_nscns);
H_PUT_32 (abfd, time (0), filehdr_out->f_timdat); /* Only use a real timestamp if the option was chosen. */
if ((pe_data (abfd)->insert_timestamp))
H_PUT_32 (abfd, time(0), filehdr_out->f_timdat);
PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr, PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
filehdr_out->f_symptr); filehdr_out->f_symptr);
H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms); H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms);
......
2013-11-22 Cory Fields <cory@coryfields.com>
* windres.c (define_resource): Use zero for timestamp, making
output deterministic. time.h include is no longer needed.
* resres.c (res_append_resource): Likewise.
2013-11-15 Alan Modra <amodra@gmail.com> 2013-11-15 Alan Modra <amodra@gmail.com>
Apply changes from mainline to 2.24 Apply changes from mainline to 2.24
......
This diff is collapsed.
--- binutils/ChangeLog
+++ binutils/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-22 Cory Fields <cory@coryfields.com>
+
+ * windres.c (define_resource): Use zero for timestamp, making
+ output deterministic. time.h include is no longer needed.
+ * resres.c (res_append_resource): Likewise.
+
2013-11-13 Martin Mitas <mity@morous.org>
* rescoff.c (write_coff_file): Use 64-bit alignment for resource
/* resres.c: read_res_file and write_res_file implementation for windres. /* resres.c: read_res_file and write_res_file implementation for windres.
Copyright 1998, 1999, 2001, 2002, 2005, 2007, 2008, 2011 Copyright 1998-2013 Free Software Foundation, Inc.
Free Software Foundation, Inc.
Written by Anders Norlander <anorland@hem2.passagen.se>. Written by Anders Norlander <anorland@hem2.passagen.se>.
Rewritten by Kai Tietz, Onevision. Rewritten by Kai Tietz, Onevision.
...@@ -32,7 +31,6 @@ ...@@ -32,7 +31,6 @@
#include "windres.h" #include "windres.h"
#include <assert.h> #include <assert.h>
#include <time.h>
static rc_uint_type write_res_directory (windres_bfd *, rc_uint_type, static rc_uint_type write_res_directory (windres_bfd *, rc_uint_type,
const rc_res_directory *, const rc_res_id *, const rc_res_directory *, const rc_res_id *,
...@@ -660,17 +658,13 @@ res_append_resource (rc_res_directory **res_dirs, rc_res_resource *resource, ...@@ -660,17 +658,13 @@ res_append_resource (rc_res_directory **res_dirs, rc_res_resource *resource,
if (*res_dirs == NULL) if (*res_dirs == NULL)
{ {
static unsigned long timeval;
/* Use the same timestamp for every resource created in a
single run. */
if (timeval == 0)
timeval = time (NULL);
*res_dirs = ((rc_res_directory *) *res_dirs = ((rc_res_directory *)
res_alloc (sizeof (rc_res_directory))); res_alloc (sizeof (rc_res_directory)));
(*res_dirs)->characteristics = 0; (*res_dirs)->characteristics = 0;
(*res_dirs)->time = timeval; /* Using a real timestamp only serves to create non-deterministic
results. Use zero instead. */
(*res_dirs)->time = 0;
(*res_dirs)->major = 0; (*res_dirs)->major = 0;
(*res_dirs)->minor = 0; (*res_dirs)->minor = 0;
(*res_dirs)->entries = NULL; (*res_dirs)->entries = NULL;
......
/* windres.c -- a program to manipulate Windows resources /* windres.c -- a program to manipulate Windows resources
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, Copyright 1997-2013 Free Software Foundation, Inc.
2009, 2011, 2012 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support. Written by Ian Lance Taylor, Cygnus Support.
Rewritten by Kai Tietz, Onevision. Rewritten by Kai Tietz, Onevision.
...@@ -37,7 +36,6 @@ ...@@ -37,7 +36,6 @@
#include "sysdep.h" #include "sysdep.h"
#include <assert.h> #include <assert.h>
#include <time.h>
#include "bfd.h" #include "bfd.h"
#include "getopt.h" #include "getopt.h"
#include "bucomm.h" #include "bucomm.h"
...@@ -339,17 +337,12 @@ define_resource (rc_res_directory **resources, int cids, ...@@ -339,17 +337,12 @@ define_resource (rc_res_directory **resources, int cids,
if (*resources == NULL) if (*resources == NULL)
{ {
static unsigned int timeval;
/* Use the same timestamp for every resource created in a
single run. */
if (timeval == 0)
timeval = time (NULL);
*resources = ((rc_res_directory *) *resources = ((rc_res_directory *)
res_alloc (sizeof (rc_res_directory))); res_alloc (sizeof (rc_res_directory)));
(*resources)->characteristics = 0; (*resources)->characteristics = 0;
(*resources)->time = timeval; /* Using a real timestamp only serves to create non-deterministic
results. Use zero instead. */
(*resources)->time = 0;
(*resources)->major = 0; (*resources)->major = 0;
(*resources)->minor = 0; (*resources)->minor = 0;
(*resources)->entries = NULL; (*resources)->entries = NULL;
......
2013-11-22 Cory Fields <cory@coryfields.com>
* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
* libcoff.h: Regenerate.
* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Only use a real
timestamp if --insert-timestamp was used.
2013-11-19 Roland McGrath <mcgrathr@google.com> 2013-11-19 Roland McGrath <mcgrathr@google.com>
Alan Modra <amodra@gmail.com> Alan Modra <amodra@gmail.com>
......
This diff is collapsed.
--- ld/ChangeLog
+++ ld/ChangeLog
@@ -1,3 +1,11 @@
+2013-11-22 Cory Fields <cory@coryfields.com>
+
+ * pe-dll.c (fill_edata): Only use a real timestamp if
+ --insert-timestamp was used.
+ * emultempl/pe.em: Add the --insert-timestamp option.
+ * emultempl/pep.em: Likewise for 64bit.
+ * ld.texinfo: Document the --insert-timestamp option.
+
2013-11-22 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* scripttempl/avr.sc: Set .data section's LMA to next available
...@@ -130,6 +130,7 @@ static int support_old_code = 0; ...@@ -130,6 +130,7 @@ static int support_old_code = 0;
static char * thumb_entry_symbol = NULL; static char * thumb_entry_symbol = NULL;
static lang_assignment_statement_type *image_base_statement = 0; static lang_assignment_statement_type *image_base_statement = 0;
static unsigned short pe_dll_characteristics = 0; static unsigned short pe_dll_characteristics = 0;
static bfd_boolean insert_timestamp = FALSE;
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable. */ static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable. */
...@@ -239,8 +240,7 @@ fragment <<EOF ...@@ -239,8 +240,7 @@ fragment <<EOF
(OPTION_EXCLUDE_LIBS + 1) (OPTION_EXCLUDE_LIBS + 1)
#define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \ #define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1) (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
#define OPTION_LARGE_ADDRESS_AWARE \ #define OPTION_LARGE_ADDRESS_AWARE (OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
(OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
#define OPTION_DISABLE_LARGE_ADDRESS_AWARE \ #define OPTION_DISABLE_LARGE_ADDRESS_AWARE \
(OPTION_LARGE_ADDRESS_AWARE + 1) (OPTION_LARGE_ADDRESS_AWARE + 1)
#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 \ #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 \
...@@ -251,15 +251,13 @@ fragment <<EOF ...@@ -251,15 +251,13 @@ fragment <<EOF
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1) (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
#define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \ #define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
(OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1) (OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
#define OPTION_NO_LEADING_UNDERSCORE \ #define OPTION_NO_LEADING_UNDERSCORE (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
(OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1) #define OPTION_LEADING_UNDERSCORE (OPTION_NO_LEADING_UNDERSCORE + 1)
#define OPTION_LEADING_UNDERSCORE \
(OPTION_NO_LEADING_UNDERSCORE + 1)
#define OPTION_ENABLE_LONG_SECTION_NAMES \ #define OPTION_ENABLE_LONG_SECTION_NAMES \
(OPTION_LEADING_UNDERSCORE + 1) (OPTION_LEADING_UNDERSCORE + 1)
#define OPTION_DISABLE_LONG_SECTION_NAMES \ #define OPTION_DISABLE_LONG_SECTION_NAMES \
(OPTION_ENABLE_LONG_SECTION_NAMES + 1) (OPTION_ENABLE_LONG_SECTION_NAMES + 1)
/* DLLCharacteristics flags */ /* DLLCharacteristics flags. */
#define OPTION_DYNAMIC_BASE (OPTION_DISABLE_LONG_SECTION_NAMES + 1) #define OPTION_DYNAMIC_BASE (OPTION_DISABLE_LONG_SECTION_NAMES + 1)
#define OPTION_FORCE_INTEGRITY (OPTION_DYNAMIC_BASE + 1) #define OPTION_FORCE_INTEGRITY (OPTION_DYNAMIC_BASE + 1)
#define OPTION_NX_COMPAT (OPTION_FORCE_INTEGRITY + 1) #define OPTION_NX_COMPAT (OPTION_FORCE_INTEGRITY + 1)
...@@ -268,6 +266,8 @@ fragment <<EOF ...@@ -268,6 +266,8 @@ fragment <<EOF
#define OPTION_NO_BIND (OPTION_NO_SEH + 1) #define OPTION_NO_BIND (OPTION_NO_SEH + 1)
#define OPTION_WDM_DRIVER (OPTION_NO_BIND + 1) #define OPTION_WDM_DRIVER (OPTION_NO_BIND + 1)
#define OPTION_TERMINAL_SERVER_AWARE (OPTION_WDM_DRIVER + 1) #define OPTION_TERMINAL_SERVER_AWARE (OPTION_WDM_DRIVER + 1)
/* Determinism. */
#define OPTION_INSERT_TIMESTAMP (OPTION_TERMINAL_SERVER_AWARE + 1)
static void static void
gld${EMULATION_NAME}_add_options gld${EMULATION_NAME}_add_options
...@@ -301,6 +301,7 @@ gld${EMULATION_NAME}_add_options ...@@ -301,6 +301,7 @@ gld${EMULATION_NAME}_add_options
OPTION_USE_NUL_PREFIXED_IMPORT_TABLES}, OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
{"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE}, {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
{"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE}, {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
{"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
/* getopt allows abbreviations, so we do this to stop it /* getopt allows abbreviations, so we do this to stop it
from treating -o as an abbreviation for this option. */ from treating -o as an abbreviation for this option. */
...@@ -438,6 +439,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file) ...@@ -438,6 +439,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
fprintf (file, _(" --support-old-code Support interworking with old code\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, _(" --[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, _(" --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, _(" This makes binaries non-deterministic\n"));
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n")); fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n")); fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n"));
...@@ -754,6 +757,9 @@ gld${EMULATION_NAME}_handle_option (int optc) ...@@ -754,6 +757,9 @@ gld${EMULATION_NAME}_handle_option (int optc)
case OPTION_LEADING_UNDERSCORE: case OPTION_LEADING_UNDERSCORE:
pe_leading_underscore = 1; pe_leading_underscore = 1;
break; break;
case OPTION_INSERT_TIMESTAMP:
insert_timestamp = TRUE;
break;
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
case OPTION_OUT_DEF: case OPTION_OUT_DEF:
pe_out_def_filename = xstrdup (optarg); pe_out_def_filename = xstrdup (optarg);
...@@ -1255,6 +1261,7 @@ gld_${EMULATION_NAME}_after_open (void) ...@@ -1255,6 +1261,7 @@ gld_${EMULATION_NAME}_after_open (void)
pe_data (link_info.output_bfd)->pe_opthdr = pe; pe_data (link_info.output_bfd)->pe_opthdr = pe;
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value; pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
pe_data (link_info.output_bfd)->real_flags |= real_flags; pe_data (link_info.output_bfd)->real_flags |= real_flags;
pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
/* At this point we must decide whether to use long section names /* At this point we must decide whether to use long section names
in the output or not. If the user hasn't explicitly specified in the output or not. If the user hasn't explicitly specified
......
...@@ -18,8 +18,7 @@ esac ...@@ -18,8 +18,7 @@ esac
rm -f e${EMULATION_NAME}.c rm -f e${EMULATION_NAME}.c
(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-) (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
fragment <<EOF fragment <<EOF
/* Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 /* Copyright 2006-2013 Free Software Foundation, Inc.
Free Software Foundation, Inc.
Written by Kai Tietz, OneVision Software GmbH&CoKg. Written by Kai Tietz, OneVision Software GmbH&CoKg.
This file is part of the GNU Binutils. This file is part of the GNU Binutils.
...@@ -146,6 +145,7 @@ static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE; ...@@ -146,6 +145,7 @@ static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE;
static int support_old_code = 0; static int support_old_code = 0;
static lang_assignment_statement_type *image_base_statement = 0; static lang_assignment_statement_type *image_base_statement = 0;
static unsigned short pe_dll_characteristics = 0; static unsigned short pe_dll_characteristics = 0;
static bfd_boolean insert_timestamp = FALSE;
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
static int pep_enable_stdcall_fixup = 1; /* 0=disable 1=enable (default). */ static int pep_enable_stdcall_fixup = 1; /* 0=disable 1=enable (default). */
...@@ -241,6 +241,7 @@ enum options ...@@ -241,6 +241,7 @@ enum options
OPTION_NO_SEH, OPTION_NO_SEH,
OPTION_NO_BIND, OPTION_NO_BIND,
OPTION_WDM_DRIVER, OPTION_WDM_DRIVER,
OPTION_INSERT_TIMESTAMP,
OPTION_TERMINAL_SERVER_AWARE OPTION_TERMINAL_SERVER_AWARE
}; };
...@@ -316,6 +317,7 @@ gld${EMULATION_NAME}_add_options ...@@ -316,6 +317,7 @@ gld${EMULATION_NAME}_add_options
{"no-bind", no_argument, NULL, OPTION_NO_BIND}, {"no-bind", no_argument, NULL, OPTION_NO_BIND},
{"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER}, {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
{"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE}, {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
{"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
...@@ -402,6 +404,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file) ...@@ -402,6 +404,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
fprintf (file, _(" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n")); fprintf (file, _(" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"));
fprintf (file, _(" --support-old-code Support interworking with old code\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, _(" --[no-]leading-underscore Set explicit symbol underscore prefix mode\n"));
fprintf (file, _(" --insert-timestamp Use a real timestamp rather than zero.\n"));
fprintf (file, _(" This makes binaries non-deterministic\n"));
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n")); fprintf (file, _(" --add-stdcall-alias Export symbols with and without @nn\n"));
fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n")); fprintf (file, _(" --disable-stdcall-fixup Don't link _sym to _sym@nn\n"));
...@@ -707,6 +711,9 @@ gld${EMULATION_NAME}_handle_option (int optc) ...@@ -707,6 +711,9 @@ gld${EMULATION_NAME}_handle_option (int optc)
case OPTION_LEADING_UNDERSCORE: case OPTION_LEADING_UNDERSCORE:
pep_leading_underscore = 1; pep_leading_underscore = 1;
break; break;
case OPTION_INSERT_TIMESTAMP:
insert_timestamp = TRUE;
break;
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
case OPTION_OUT_DEF: case OPTION_OUT_DEF:
pep_out_def_filename = xstrdup (optarg); pep_out_def_filename = xstrdup (optarg);
...@@ -1219,6 +1226,7 @@ gld_${EMULATION_NAME}_after_open (void) ...@@ -1219,6 +1226,7 @@ gld_${EMULATION_NAME}_after_open (void)
pe_data (link_info.output_bfd)->pe_opthdr = pep; pe_data (link_info.output_bfd)->pe_opthdr = pep;
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value; pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
pe_data (link_info.output_bfd)->real_flags |= real_flags; pe_data (link_info.output_bfd)->real_flags |= real_flags;
pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
/* At this point we must decide whether to use long section names /* At this point we must decide whether to use long section names
in the output or not. If the user hasn't explicitly specified in the output or not. If the user hasn't explicitly specified
......
...@@ -2657,6 +2657,11 @@ The driver uses the MS Windows Driver Model. ...@@ -2657,6 +2657,11 @@ The driver uses the MS Windows Driver Model.
@item --tsaware @item --tsaware
The image is Terminal Server aware. 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.
@end table @end table
@c man end @c man end
......
...@@ -1170,9 +1170,6 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) ...@@ -1170,9 +1170,6 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
unsigned char *enameptrs; unsigned char *enameptrs;
unsigned char *eordinals; unsigned char *eordinals;
char *enamestr; char *enamestr;
time_t now;
time (&now);
edata_d = xmalloc (edata_sz); edata_d = xmalloc (edata_sz);
...@@ -1187,7 +1184,10 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) ...@@ -1187,7 +1184,10 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+ edata_s->output_section->vma - image_base) + edata_s->output_section->vma - image_base)
memset (edata_d, 0, edata_sz); memset (edata_d, 0, edata_sz);
bfd_put_32 (abfd, now, edata_d + 4);
if (pe_data (abfd)->insert_timestamp)
H_PUT_32 (abfd, time (0), edata_d + 4);
if (pe_def_file->version_major != -1) if (pe_def_file->version_major != -1)
{ {
bfd_put_16 (abfd, pe_def_file->version_major, edata_d + 8); bfd_put_16 (abfd, pe_def_file->version_major, edata_d + 8);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment