aboutsummaryrefslogtreecommitdiff
path: root/ld/pe-dll.c
diff options
context:
space:
mode:
authorJohannes Schauer Marin Rodrigues <josch@debian.org>2023-07-24 16:59:19 +0100
committerNick Clifton <nickc@redhat.com>2023-07-24 16:59:19 +0100
commit6badd1020f5bebd3f60a780b8e41a1b581046087 (patch)
tree0b1d5349acee5860922b00f2bf00c958d34b0d43 /ld/pe-dll.c
parent4701770c57af26fd410f652dc5f742a10d1c54dc (diff)
downloadbinutils-6badd1020f5bebd3f60a780b8e41a1b581046087.zip
binutils-6badd1020f5bebd3f60a780b8e41a1b581046087.tar.gz
binutils-6badd1020f5bebd3f60a780b8e41a1b581046087.tar.bz2
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.
Diffstat (limited to 'ld/pe-dll.c')
-rw-r--r--ld/pe-dll.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 02e03d1..a95b85c 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);