* windres.c (define_resource): Use zero for timestamp, making
output deterministic. time.h include is no longer needed. * resres.c (res_append_resource): Likewise. * 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. * 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.
This commit is contained in:
parent
194cca4119
commit
0cb112f740
@ -1,3 +1,10 @@
|
|||||||
|
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
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
/* 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
|
|||||||
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 @@
|
|||||||
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
|
|||||||
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;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* 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)
|
|||||||
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);
|
||||||
|
@ -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>
|
2013-11-13 Martin Mitas <mity@morous.org>
|
||||||
|
|
||||||
* rescoff.c (write_coff_file): Use 64-bit alignment for resource
|
* rescoff.c (write_coff_file): Use 64-bit alignment for resource
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* 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 @@
|
|||||||
#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,
|
|||||||
|
|
||||||
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;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* 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 @@
|
|||||||
|
|
||||||
#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,
|
|||||||
|
|
||||||
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;
|
||||||
|
@ -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>
|
2013-11-22 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
* scripttempl/avr.sc: Set .data section's LMA to next available
|
* scripttempl/avr.sc: Set .data section's LMA to next available
|
||||||
|
@ -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
|
|||||||
(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
|
|||||||
(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
|
|||||||
#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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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
|
|||||||
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;
|
|||||||
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
|
|||||||
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
|
|||||||
{"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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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.
|
|||||||
@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
|
||||||
|
@ -1169,9 +1169,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);
|
||||||
|
|
||||||
@ -1186,7 +1183,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);
|
||||||
|
Loading…
Reference in New Issue
Block a user