[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#823937: marked as done (gcc -E has __DATE__/__TIME__ as Jan 1 1970 00:00:00)



Your message dated Mon, 15 May 2017 19:49:03 +0000
with message-id <E1dALzL-000HHE-Ck@fasolo.debian.org>
and subject line Bug#823937: fixed in gcc-5 5.4.1-10
has caused the Debian Bug report #823937,
regarding gcc -E has __DATE__/__TIME__ as Jan 1 1970 00:00:00
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
823937: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823937
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: gcc-5
Version: 5.3.1-17
Severity: normal
Tags: upstream patch
Control: clone -1 -2
Control: reassign -2 gcc-6 6.1.1-1

Hi,
With the SOURCE_DATE_EPOCH patch from upstream, the __DATE__ and
__TIME__ macros always give Jan 1 1970 00:00:00 when running the
preprocessor on its own with gcc -E[1]. I believe this is because
c_lex_with_flags is not called when just preprocessing (no C code needs
to be lexed), so pfile->source_date_epoch stays initialised to 0, and
subsequent __DATE__/__TIME__ expansions believe that the timestamp has
been set to epoch 0. I have attached an alternative implementation of
gcc-SOURCE_DATE_EPOCH.diff which fixes this, by initialising
pfile->source_date_epoch inside libcpp when pfile is initially created.

[1] https://paste.debian.net/683081/

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.5.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages gcc-5 depends on:
ii  binutils      2.26-8
ii  cpp-5         5.3.1-17
ii  gcc-5-base    5.3.1-17
ii  libc6         2.22-7
ii  libcc1-0      6.1.1-1
ii  libgcc-5-dev  5.3.1-17
ii  libgcc1       1:6.1.1-1
ii  libgmp10      2:6.1.0+dfsg-2
ii  libisl15      0.16.1-1
ii  libmpc3       1.0.3-1
ii  libmpfr4      3.1.4-1
ii  libstdc++6    6.1.1-1
ii  zlib1g        1:1.2.8.dfsg-2+b1

Versions of packages gcc-5 recommends:
ii  libc6-dev  2.22-7

Versions of packages gcc-5 suggests:
pn  gcc-5-doc         <none>
pn  gcc-5-locales     <none>
pn  gcc-5-multilib    <none>
pn  libasan2-dbg      <none>
pn  libatomic1-dbg    <none>
pn  libcilkrts5-dbg   <none>
pn  libgcc1-dbg       <none>
pn  libgomp1-dbg      <none>
pn  libitm1-dbg       <none>
pn  liblsan0-dbg      <none>
pn  libmpx0-dbg       <none>
pn  libquadmath0-dbg  <none>
pn  libtsan0-dbg      <none>
pn  libubsan0-dbg     <none>

-- no debconf information
--- a/src/libcpp/init.c
+++ b/src/libcpp/init.c
@@ -36,6 +36,7 @@
 
 static void init_library (void);
 static void mark_named_operators (cpp_reader *, int);
+static void cpp_init_source_date_epoch (cpp_reader *);
 static void read_original_filename (cpp_reader *);
 static void read_original_directory (cpp_reader *);
 static void post_options (cpp_reader *);
@@ -264,6 +265,9 @@
 
   _cpp_init_hashtable (pfile, table);
 
+  /* Initialize the source_date_epoch value.  */
+  cpp_init_source_date_epoch (pfile);
+
   return pfile;
 }
 
@@ -530,6 +534,46 @@
     _cpp_define_builtin (pfile, "__OBJC__ 1");
 }
 
+/* Read SOURCE_DATE_EPOCH from environment to have a deterministic
+   timestamp to replace embedded current dates to get reproducible
+   results.  Returns -1 if SOURCE_DATE_EPOCH is not defined.  */
+static time_t
+get_source_date_epoch (cpp_reader *pfile)
+{
+  char *source_date_epoch;
+  long long epoch;
+  char *endptr;
+
+  source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
+  if (!source_date_epoch)
+    return (time_t) -1;
+
+  errno = 0;
+  epoch = strtoll (source_date_epoch, &endptr, 10);
+  if ((errno == ERANGE && (epoch == LLONG_MAX || epoch == LLONG_MIN))
+      || (errno != 0 && epoch == 0))
+    cpp_error (pfile, CPP_DL_FATAL, "environment variable $SOURCE_DATE_EPOCH: "
+		 "strtoll: %s\n", xstrerror(errno));
+  if (endptr == source_date_epoch)
+    cpp_error (pfile, CPP_DL_FATAL, "environment variable $SOURCE_DATE_EPOCH: "
+		 "no digits were found: %s\n", endptr);
+  if (*endptr != '\0')
+    cpp_error (pfile, CPP_DL_FATAL, "environment variable $SOURCE_DATE_EPOCH: "
+		 "trailing garbage: %s\n", endptr);
+  if (epoch < 0)
+    cpp_error (pfile, CPP_DL_FATAL, "environment variable $SOURCE_DATE_EPOCH: "
+		 "value must be nonnegative: %lld \n", epoch);
+
+  return (time_t) epoch;
+}
+
+/* Initialize the source_date_epoch value.  */
+static void
+cpp_init_source_date_epoch (cpp_reader *pfile)
+{
+  pfile->source_date_epoch = get_source_date_epoch (pfile);
+}
+
 /* Sanity-checks are dependent on command-line options, so it is
    called as a subroutine of cpp_read_main_file ().  */
 #if ENABLE_CHECKING
--- a/src/libcpp/internal.h
+++ b/src/libcpp/internal.h
@@ -502,6 +502,10 @@
   const unsigned char *date;
   const unsigned char *time;
 
+  /* Externally set timestamp to replace current date and time useful for
+     reproducibility.  */
+  time_t source_date_epoch;
+
   /* EOF token, and a token forcing paste avoidance.  */
   cpp_token avoid_paste;
   cpp_token eof;
--- a/src/libcpp/macro.c
+++ b/src/libcpp/macro.c
@@ -350,13 +350,20 @@
 	  time_t tt;
 	  struct tm *tb = NULL;
 
-	  /* (time_t) -1 is a legitimate value for "number of seconds
-	     since the Epoch", so we have to do a little dance to
-	     distinguish that from a genuine error.  */
-	  errno = 0;
-	  tt = time(NULL);
-	  if (tt != (time_t)-1 || errno == 0)
-	    tb = localtime (&tt);
+	  /* Set a reproducible timestamp for __DATE__ and __TIME__ macro
+	     usage if SOURCE_DATE_EPOCH is defined.  */
+	  if (pfile->source_date_epoch != (time_t) -1)
+	     tb = gmtime (&pfile->source_date_epoch);
+	  else
+	    {
+	      /* (time_t) -1 is a legitimate value for "number of seconds
+		 since the Epoch", so we have to do a little dance to
+		 distinguish that from a genuine error.  */
+	      errno = 0;
+	      tt = time (NULL);
+	      if (tt != (time_t)-1 || errno == 0)
+		tb = localtime (&tt);
+	    }
 
 	  if (tb)
 	    {

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Source: gcc-5
Source-Version: 5.4.1-10

We believe that the bug you reported is fixed in the latest version of
gcc-5, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 823937@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Matthias Klose <doko@debian.org> (supplier of updated gcc-5 package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Mon, 15 May 2017 11:23:28 -0700
Source: gcc-5
Binary: gcc-5-base libgcc-5-dev libgcc4 libgcc4-dbg lib64gcc-5-dev lib32gcc-5-dev libn32gcc-5-dev libx32gcc-5-dev gcc-5 gcc-5-multilib gcc-5-test-results gcc-5-plugin-dev gcc-5-hppa64-linux-gnu cpp-5 gcc-5-locales g++-5 g++-5-multilib libasan2 libasan2-dbg lib32asan2 lib32asan2-dbg lib64asan2 lib64asan2-dbg libx32asan2 libx32asan2-dbg libmpx0 libmpx0-dbg lib32mpx0 lib32mpx0-dbg lib64mpx0 lib64mpx0-dbg libgccjit-5-doc libgccjit-5-dev gobjc++-5 gobjc++-5-multilib gobjc-5 gobjc-5-multilib libobjc-5-dev lib64objc-5-dev lib32objc-5-dev libn32objc-5-dev libx32objc-5-dev gfortran-5 gfortran-5-multilib libgfortran-5-dev lib64gfortran-5-dev lib32gfortran-5-dev libn32gfortran-5-dev libx32gfortran-5-dev gccgo-5 gccgo-5-multilib libgo7 libgo7-dbg lib64go7 lib64go7-dbg lib32go7 lib32go7-dbg libn32go7 libn32go7-dbg libx32go7 libx32go7-dbg gcj-5 gcj-5-jdk gcj-5-jre-headless gcj-5-jre libgcj16 gcj-5-jre-lib libgcj16-awt libgcj16-dev libgcj16-dbg gcj-5-source libgcj-doc libstdc++-5-dev
 libstdc++-5-pic libstdc++6-5-dbg lib32stdc++-5-dev lib32stdc++6-5-dbg lib64stdc++-5-dev lib64stdc++6-5-dbg libn32stdc++-5-dev libn32stdc++6-5-dbg libx32stdc++-5-dev libx32stdc++6-5-dbg libstdc++-5-doc gnat-5 gnat-5-sjlj libgnat-5 libgnat-5-dbg libgnatvsn5-dev libgnatvsn5 libgnatvsn5-dbg libgnatprj5-dev libgnatprj5 libgnatprj5-dbg gdc-5 gdc-5-multilib libphobos-5-dev lib64phobos-5-dev lib32phobos-5-dev libx32phobos-5-dev
 gcc-5-source
Architecture: source
Version: 5.4.1-10
Distribution: unstable
Urgency: medium
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Changed-By: Matthias Klose <doko@debian.org>
Description:
 cpp-5      - GNU C preprocessor
 g++-5      - GNU C++ compiler
 g++-5-multilib - GNU C++ compiler (multilib support)
 gcc-5      - GNU C compiler
 gcc-5-base - GCC, the GNU Compiler Collection (base package)
 gcc-5-hppa64-linux-gnu - GNU C compiler (cross compiler for hppa64)
 gcc-5-locales - GCC, the GNU compiler collection (native language support files)
 gcc-5-multilib - GNU C compiler (multilib support)
 gcc-5-plugin-dev - Files for GNU GCC plugin development.
 gcc-5-source - Source of the GNU Compiler Collection
 gcc-5-test-results - Test results for the GCC test suite
 gccgo-5    - GNU Go compiler
 gccgo-5-multilib - GNU Go compiler (multilib support)
 gcj-5      - GCJ byte code and native compiler for Java(TM)
 gcj-5-jdk  - GCJ and Classpath development tools for Java(TM)
 gcj-5-jre  - Java runtime environment using GIJ/Classpath
 gcj-5-jre-headless - Java runtime environment using GIJ/Classpath (headless version)
 gcj-5-jre-lib - Java runtime library for use with gcj (jar files)
 gcj-5-source - GCJ java sources for use in IDEs like eclipse and netbeans
 gdc-5      - GNU D compiler (version 2)
 gdc-5-multilib - GNU D compiler (version 2, multilib support)
 gfortran-5 - GNU Fortran compiler
 gfortran-5-multilib - GNU Fortran compiler (multilib support)
 gnat-5     - GNU Ada compiler
 gnat-5-sjlj - GNU Ada compiler (setjump/longjump runtime library)
 gobjc++-5  - GNU Objective-C++ compiler
 gobjc++-5-multilib - GNU Objective-C++ compiler (multilib support)
 gobjc-5    - GNU Objective-C compiler
 gobjc-5-multilib - GNU Objective-C compiler (multilib support)
 lib32asan2 - AddressSanitizer -- a fast memory error detector (32bit)
 lib32asan2-dbg - AddressSanitizer -- a fast memory error detector (32 bit debug sy
 lib32gcc-5-dev - GCC support library (32 bit development files)
 lib32gfortran-5-dev - Runtime library for GNU Fortran applications (32bit development f
 lib32go7   - Runtime library for GNU Go applications (32bit)
 lib32go7-dbg - Runtime library for GNU Go applications (32 bit debug symbols)
 lib32mpx0  - Intel memory protection extensions (32bit)
 lib32mpx0-dbg - Intel memory protection extensions (32 bit debug symbols)
 lib32objc-5-dev - Runtime library for GNU Objective-C applications (32bit developme
 lib32phobos-5-dev - Phobos D standard library (64bit development files)
 lib32stdc++-5-dev - GNU Standard C++ Library v3 (development files)
 lib32stdc++6-5-dbg - GNU Standard C++ Library v3 (debugging files)
 lib64asan2 - AddressSanitizer -- a fast memory error detector (64bit)
 lib64asan2-dbg - AddressSanitizer -- a fast memory error detector (64bit debug sym
 lib64gcc-5-dev - GCC support library (64bit development files)
 lib64gfortran-5-dev - Runtime library for GNU Fortran applications (64bit development f
 lib64go7   - Runtime library for GNU Go applications (64bit)
 lib64go7-dbg - Runtime library for GNU Go applications (64bit debug symbols)
 lib64mpx0  - Intel memory protection extensions (64bit)
 lib64mpx0-dbg - Intel memory protection extensions (64bit debug symbols)
 lib64objc-5-dev - Runtime library for GNU Objective-C applications (64bit developme
 lib64phobos-5-dev - Phobos D standard library (64bit development files)
 lib64stdc++-5-dev - GNU Standard C++ Library v3 (development files)
 lib64stdc++6-5-dbg - GNU Standard C++ Library v3 (debugging files)
 libasan2   - AddressSanitizer -- a fast memory error detector
 libasan2-dbg - AddressSanitizer -- a fast memory error detector (debug symbols)
 libgcc-5-dev - GCC support library (development files)
 libgcc4    - GCC support library
 libgcc4-dbg - GCC support library (debug symbols)
 libgccjit-5-dev - GCC just-in-time compilation (development files)
 libgccjit-5-doc - GCC just-in-time compilation (documentation)
 libgcj-doc - libgcj API documentation and example programs
 libgcj16   - Java runtime library for use with gcj
 libgcj16-awt - AWT peer runtime libraries for use with gcj
 libgcj16-dbg - Debugging symbols for libraries provided in libgcj16-dev
 libgcj16-dev - Java development headers for use with gcj
 libgfortran-5-dev - Runtime library for GNU Fortran applications (development files)
 libgnat-5  - runtime for applications compiled with GNAT (shared library)
 libgnat-5-dbg - runtime for applications compiled with GNAT (debugging symbols)
 libgnatprj5 - GNU Ada compiler Project Manager (shared library)
 libgnatprj5-dbg - GNU Ada compiler Project Manager (debugging symbols)
 libgnatprj5-dev - GNU Ada compiler Project Manager (development files)
 libgnatvsn5 - GNU Ada compiler selected components (shared library)
 libgnatvsn5-dbg - GNU Ada compiler selected components (debugging symbols)
 libgnatvsn5-dev - GNU Ada compiler selected components (development files)
 libgo7     - Runtime library for GNU Go applications
 libgo7-dbg - Runtime library for GNU Go applications (debug symbols)
 libmpx0    - Intel memory protection extensions (runtime)
 libmpx0-dbg - Intel memory protection extensions (debug symbols)
 libn32gcc-5-dev - GCC support library (n32 development files)
 libn32gfortran-5-dev - Runtime library for GNU Fortran applications (n32 development fil
 libn32go7  - Runtime library for GNU Go applications (n32)
 libn32go7-dbg - Runtime library for GNU Go applications (n32 debug symbols)
 libn32objc-5-dev - Runtime library for GNU Objective-C applications (n32 development
 libn32stdc++-5-dev - GNU Standard C++ Library v3 (development files)
 libn32stdc++6-5-dbg - GNU Standard C++ Library v3 (debugging files)
 libobjc-5-dev - Runtime library for GNU Objective-C applications (development fil
 libphobos-5-dev - Phobos D standard library
 libstdc++-5-dev - GNU Standard C++ Library v3 (development files)
 libstdc++-5-doc - GNU Standard C++ Library v3 (documentation files)
 libstdc++-5-pic - GNU Standard C++ Library v3 (shared library subset kit)
 libstdc++6-5-dbg - GNU Standard C++ Library v3 (debugging files)
 libx32asan2 - AddressSanitizer -- a fast memory error detector (x32)
 libx32asan2-dbg - AddressSanitizer -- a fast memory error detector (x32 debug symbo
 libx32gcc-5-dev - GCC support library (x32 development files)
 libx32gfortran-5-dev - Runtime library for GNU Fortran applications (x32 development fil
 libx32go7  - Runtime library for GNU Go applications (x32)
 libx32go7-dbg - Runtime library for GNU Go applications (x32 debug symbols)
 libx32objc-5-dev - Runtime library for GNU Objective-C applications (x32 development
 libx32phobos-5-dev - Phobos D standard library (x32 development files)
 libx32stdc++-5-dev - GNU Standard C++ Library v3 (development files)
 libx32stdc++6-5-dbg - GNU Standard C++ Library v3 (debugging files)
Closes: 823937
Changes:
 gcc-5 (5.4.1-10) unstable; urgency=medium
 .
   * Update to SVN 20170515 (r248069, 5.4.1) from the gcc-5-branch.
     - Fix PR libstdc++/79980, PR libstdc++/80041, PR libstdc++/79980,
       PR libstdc++/79511, PR libstdc++/80034, PR target/45053 (PPC),
       PR c++/79548, PR target/69868 (PPC), PR target/68491 (x86),
       PR target/68390 (ARM), PR target/80376 (PPC), PR target/80315 (PPC),
       PR target/80082 (ARM), PR ipa/77333, PR tree-optimization/68021,
       PR target/79733 (x86), PR target/80246 (PPC), PR target/80180 (x86),
       PR lto/79587, PR target/79906 (PPC), PR gcov-profile/80081,
       PR middle-end/79753, PR target/79769, PR target/79770,
       PR middle-end/79831, PR middle-end/78339, PR target/65705,
       PR target/69804, PR sanitizer/71458, PR tree-optimization/79631,
       PR ipa/79761, PR tree-optimization/79803, PR rtl-optimization/79574,
       PR rtl-optimization/79574, PR rtl-optimization/79577,
       PR target/79951 (PPC), PR target/71017 (x86), PR target/80019 (x86),
       PR target/79439 (PPC), PR target/77850 (PA), PR fortran/80392,
       PR fortran/80361, PR fortran/59910, PR fortran/80388, PR c/79756,
       PR tree-optimization/79732, PR tree-optimization/79666,
       PR tree-optimization/80122, PR tree-optimization/80334,
       PR middle-end/80539, PR fortran/79894.
   * Fix symlinks to man pages in the hppa64 package. Addresses: #857583.
   * Fix ecj1 symlink for gcj cross compiler packages. Addresses: #855640.
   * Don't ship the gnatgcc manpage symlink when building GFDL packages.
     Addresses: #857384.
   * Install the gcov-dump utility.
   * Remove libquadmath/gdtoa license from debian/copyright (files removed).
   * PR preprocessor/71183, taken from the trunk. Closes: #823937.
   * Update the Linaro support to the 5-2017.05 snapshot.
   * Disable running the testsuite on KFreeBSD, hanging the buildds.
Checksums-Sha1:
 50bc1a9ab8fd1fe21ec9550854b6e2d2b6c3357d 17620 gcc-5_5.4.1-10.dsc
 639911c963b05f6999a03961e854d9105edc44c8 3612706 gcc-5_5.4.1-10.diff.gz
 afe798a7e812373e90a9ee4c353625d6e345e620 14698 gcc-5_5.4.1-10_source.buildinfo
Checksums-Sha256:
 fc4241a4330cb78a5dfb9f2b9e5fe90dd58fd3d94247ddad952ad446af0b1d3f 17620 gcc-5_5.4.1-10.dsc
 7b6b55e3e9112e3c86630ee8046d7f8869662a1dce8e7fb435e2de03bf35818b 3612706 gcc-5_5.4.1-10.diff.gz
 5163509ff18acae06658987a1df210130dd9b2ce6a02bbf200738a33e972a09b 14698 gcc-5_5.4.1-10_source.buildinfo
Files:
 941a4d10193b60a207ad210dcf0a7966 17620 devel optional gcc-5_5.4.1-10.dsc
 f7bfd7f75352d19dc7ca7c4bac28e946 3612706 devel optional gcc-5_5.4.1-10.diff.gz
 f1181fc6b77080c807f91dd059ef50eb 14698 devel optional gcc-5_5.4.1-10_source.buildinfo

-----BEGIN PGP SIGNATURE-----

iQJEBAEBCAAuFiEE1WVxuIqLuvFAv2PWvX6qYHePpvUFAlkaA44QHGRva29AZGVi
aWFuLm9yZwAKCRC9fqpgd4+m9bp7D/9k2IXuc5jnE8Zrgr9yTinMHo9JDVyb3y0C
+Wg+gdNwdiG3CPZbDFg510jQsbxqFnVK3SSqFAqjdFH/sGtOrjGYNX6j/WVqaj4L
kDBIiAuQICMeMj5ZDLg1Np51I34wlgB6L/KSUnyapHjy8nCa5Bd/A4knyBQ9KWnq
uf58MURuk1J+vWHHa5Xx4KW9d/49ZYDCRxhod/YC7deGSSSkx9C7R2vJkemlbgKl
F7fpqfUqwt73Xt2eOg88c/RwCdTYDzPtd4PxLBiLfpRsjtUX2GC3OUn+9C0PPtbR
xV+ESgYT0+FzXF3Y0efNE/8U09KSgFeQwYt/I5Y0oHL3Dt+/PXMjAqeypARk4UVw
YiJhf54qaKOEhqUL6l+JpvVpWZkQFqjenrT1sjRnPFUUJ/sQ2VwaYBRFKbDgPFN8
CK8zXnBjcX4Jf42tlwZNUh+1mD25GG1VBgZP0Cbri7kCPGJOzbxP3f45b/v9sbXN
t9cgpedwuhBwjFG5dHDdEoutWZIS3+1QN1MZdt7nt0e8vK9FK4CvpLoUxnX/6CP8
kLdUCpCzoJd3t5lTrqu/Nddpz7pag0DI7LvHUGX2twnK5gWcf9IYs7dKyLJtY+z9
LUUYNKVgyNQ65zwAQNvexCAX46C1IbAJjjpkX2gQmDyTKW4xaWrqWmsi8ZllfE/v
BQydZKMFxA==
=DSXw
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: