https://sourceware.org/bugzilla/show_bug.cgi?id=30245

            Bug ID: 30245
           Summary: Support SOURCE_DATE_EPOCH (or equivalent) to build
                    deterministic PE files.
           Product: binutils
           Version: unspecified
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: binutils
          Assignee: unassigned at sourceware dot org
          Reporter: slyich at gmail dot com
  Target Milestone: ---

I spent some time in https://github.com/NixOS/nixpkgs/issues/221419 trying to
build deterministic PE files and failed. I managed to build unstripped .exe
file with stable timestamp, but `strip` does not have a knob to achieve the
same.

Reproducer:

$ printf "int main(){}" | x86_64-w64-mingw32-gcc -x c - -o a.exe
-Wl,--no-insert-timestamp

$ x86_64-w64-mingw32-objdump -x a.exe | fgrep Time
Time/Date               Thu Jan  1 01:00:00 1970
 vma:            Hint    Time      Forward  DLL       First

$ x86_64-w64-mingw32-strip -D a.exe; x86_64-w64-mingw32-objdump -x a.exe |
fgrep Time

Time/Date               Sun Mar 19 05:20:05 2023
 vma:            Hint    Time      Forward  DLL       First

I must say that even using `-Wl,--no-insert-timestamp` is not very convenient
as it's a target-specific `ld` option. Handling `strip` on top is yet another
problem. Distribution-wide it would help to have something simpler that
clobbers timestamps.

Throwing some ideas:

One option would be to add `SOURCE_DATE_EPOCH` support:
https://reproducible-builds.org/docs/source-date-epoch/

Pros: be able to set any timestamp, not just 0.

Another option would be to default to `timestamp=0` in `binutils` (possibly
controlled by a ./configure option).

Pros: ease of use.
Cons: one extra knob to tweak.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to