public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] objcopy embeds the current time and ignores SOURCE_DATE_EPOCH making the output unreproducible.
@ 2023-07-24 16:00 Nick Clifton
  0 siblings, 0 replies; only message in thread
From: Nick Clifton @ 2023-07-24 16:00 UTC (permalink / raw)
  To: bfd-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6badd1020f5bebd3f60a780b8e41a1b581046087

commit 6badd1020f5bebd3f60a780b8e41a1b581046087
Author: Johannes Schauer Marin Rodrigues <josch@debian.org>
Date:   Mon Jul 24 16:59:19 2023 +0100

    objcopy embeds the current time and ignores SOURCE_DATE_EPOCH making the output unreproducible.
    
    bfd
      * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): If inserting a timestamp, use the value held in the SOURCE_DATE_EPOCH environment variable, if it is defined.
    binutils
      * doc/binutils.texi (objcopy): Document change in behaviour of objcopy's --preserve-dates command line option.
    ld
      * pe-dll.c (fill_edata): If inserting a timestamp, use the value held in the SOURCE_DATE_EPOCH environment variable, if it is defined.
      * ld.texi (--insert-timestamp): Document change in behaviour.

Diff:
---
 bfd/ChangeLog              |  6 ++++++
 bfd/peXXigen.c             | 15 ++++++++++++++-
 binutils/ChangeLog         |  5 +++++
 binutils/doc/binutils.texi |  5 +++++
 ld/ChangeLog               |  7 +++++++
 ld/ld.texi                 |  5 +++++
 ld/pe-dll.c                | 13 ++++++++++++-
 7 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index db032df5ac2..56c858e6ce4 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2023-07-24  Johannes Schauer Marin Rodrigues  <josch@debian.org>
+
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): If inserting a
+	timestamp, use the value held in the SOURCE_DATE_EPOCH environment
+	variable, if it is defined.
+
 2023-07-24  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
 	* reloc.c: New reloc BFD_RELOC_BPF_DISPCALL32.
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index da53f349dd0..cdd89f80330 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -838,7 +838,20 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out)
   /* Use a real timestamp by default, unless the no-insert-timestamp
      option was chosen.  */
   if ((pe_data (abfd)->timestamp) == -1)
-    H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
+    {
+      time_t now;
+      char *source_date_epoch;
+
+      /* If the SOURCE_DATE_EPOCH environment variable is
+	 defined then use that as the time, otherwise use
+	 the current time.  */
+      source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
+      if (source_date_epoch)
+	now = (time_t) strtoll (source_date_epoch, NULL, 10);
+      else
+	now = time (NULL);
+      H_PUT_32 (abfd, now, filehdr_out->f_timdat);
+    }
   else
     H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat);
 
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 097673f783e..cfd4d1ad45e 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2023-07-24  Johannes Schauer Marin Rodrigues  <josch@debian.org>
+
+	* doc/binutils.texi (objcopy): Document change in behaviour of
+	objcopy's --preserve-dates command line option.
+
 2023-07-09  Fangrui Song  <maskray@google.com>
 
 	PR 30592
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 309bedf6110..9f80f398c9d 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -1626,6 +1626,11 @@ 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
 as those of the input file.
 
+This option also copies the date stored in a PE format file's header,
+unless the SOURCE_DATE_EPOCH environment variable is defined.  If it
+is defined then this variable will be used as the date stored in the
+header, interpreted as the number of seconds since the Unix epoch.
+
 @item -D
 @itemx --enable-deterministic-archives
 @cindex deterministic archives
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 27988491efd..99029f1e186 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2023-07-24  Johannes Schauer Marin Rodrigues  <josch@debian.org>
+
+	* pe-dll.c (fill_edata): If inserting a timestamp, use the value
+	held in the SOURCE_DATE_EPOCH environment variable, if it is
+	defined.
+	* ld.texi (--insert-timestamp): Document change in behaviour.
+
 2023-07-03  Nick Clifton  <nickc@redhat.com>
 
 	* configure: Regenerate.
diff --git a/ld/ld.texi b/ld/ld.texi
index 75e82eda004..24e9debfb5f 100644
--- a/ld/ld.texi
+++ b/ld/ld.texi
@@ -3571,6 +3571,11 @@ can be used to insert a zero value for the timestamp, this ensuring
 that binaries produced from identical sources will compare
 identically.
 
+If @option{--insert-timestamp} is active then the time inserted is
+either the time that the linking takes place or, if the
+@code{SOURCE_DATE_EPOCH} environment variable is defined, the number
+of seconds since Unix epoch as specified by that variable.
+
 @kindex --enable-reloc-section
 @item --enable-reloc-section
 @itemx --disable-reloc-section
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 02e03d16948..a95b85c60dd 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1231,7 +1231,18 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
   memset (edata_d, 0, edata_sz);
 
   if (pe_data (abfd)->timestamp == -1)
-    H_PUT_32 (abfd, time (0), edata_d + 4);
+    {
+      time_t now;
+      char *source_date_epoch;
+
+      source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
+      if (source_date_epoch)
+	now = (time_t) strtoll (source_date_epoch, NULL, 10);
+      else
+	now = time (NULL);
+
+      H_PUT_32 (abfd, now, edata_d + 4);
+    }
   else
     H_PUT_32 (abfd, pe_data (abfd)->timestamp, edata_d + 4);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-07-24 16:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-24 16:00 [binutils-gdb] objcopy embeds the current time and ignores SOURCE_DATE_EPOCH making the output unreproducible Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).