You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.7 KiB
72 lines
2.7 KiB
6 years ago
|
From 0e95c51225b01f0ca79dafd607ae6a3e404db6be Mon Sep 17 00:00:00 2001
|
||
|
From: Peter Jones <pjones@redhat.com>
|
||
|
Date: Tue, 28 Mar 2017 17:59:55 -0400
|
||
|
Subject: [PATCH 13/13] Call ar in deterministic mode.
|
||
|
|
||
|
We need the x86_64 and i686 builds of .a's to be the same, and that
|
||
|
means we need to not have timestamps. Also force the timestamps on disk
|
||
|
just in case that doesn't work, because RHEL's ar /silently ignores -D/.
|
||
|
|
||
|
v2: use "ar rvD" not "ar rv -D".
|
||
|
|
||
|
It's a wonder anybody ever gets these command line options right, if
|
||
|
"ar rv -D libfoo.a foo.o" doesn't use deterministic mode (or
|
||
|
complain), but "ar rvD libfoo.a foo.o" does.
|
||
|
|
||
|
v3: Add a bunch of junk to try to set timestamps to 0 manually
|
||
|
|
||
|
For some reason I'm still getting timestamps in the .a even though ar seems to
|
||
|
be invoked correctly. When I do "mock -r rhel-7-build --shell" and run make
|
||
|
manually, they're fine. Very strange.
|
||
|
|
||
|
v4: go back to v2, the problem isn't in the make process.
|
||
|
|
||
|
"ar rDv" works just fine, but /usr/lib/rpm/redhat/brp-strip-static-archive is
|
||
|
calling "%{__strip} -g $for_each.a", and it's rewriting our binary from
|
||
|
ts/uid/gid of 0/0/0 to $epoch/$UID/$GID. Awesomely /usr/bin/strip it seems to
|
||
|
have 3 modes of operation:
|
||
|
-U: the default, which adds $epoch/$UID/$GID to your binary archive
|
||
|
instead of just removing stuff. Clearly the Principle of Least
|
||
|
Surprise is strong here.
|
||
|
-p: preserve the timestamp from the original .a, but add UID and GID,
|
||
|
because this is 1980 and people use ar(1) for archiving stuff they
|
||
|
might want that out of.
|
||
|
-D: Condescend at you in a command line error and explain that -D both
|
||
|
is and is not a valid option:
|
||
|
/usr/bin/strip: invalid option -- 'D'
|
||
|
Usage: /usr/bin/strip <option(s)> in-file(s)
|
||
|
Removes symbols and sections from files
|
||
|
The options are:
|
||
|
...
|
||
|
-D --enable-deterministic-archives
|
||
|
Produce deterministic output when stripping archives
|
||
|
So I agree that it's invalid, but I think we may be pronouncing that
|
||
|
second vowel differently. They say in-VAL-id, I say IN-vuh-lid.
|
||
|
|
||
|
Nobody should ever have to run "strace -ttt -v -f -o make.strace make all",
|
||
|
just to discover the problem isn't even in there.
|
||
|
|
||
|
Related: rhbz#1310782
|
||
|
|
||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||
|
---
|
||
|
Make.defaults | 2 +-
|
||
|
1 files changed, 1 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/Make.defaults b/Make.defaults
|
||
|
index aa15c73..8f36365 100755
|
||
|
--- a/Make.defaults
|
||
|
+++ b/Make.defaults
|
||
|
@@ -167,7 +167,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
|
||
|
$(if $(findstring clang,$(CC)),-Wno-unknown-pragmas,)
|
||
|
endif
|
||
|
|
||
|
-ARFLAGS += -U
|
||
|
+ARFLAGS := rDv
|
||
|
ASFLAGS += $(ARCH3264)
|
||
|
LDFLAGS += -nostdlib --warn-common --no-undefined --fatal-warnings \
|
||
|
--build-id=sha1
|
||
|
--
|
||
|
2.9.3
|
||
|
|