Package: gcc-5 Version: 5.3.1-12 Severity: wishlist Tags: patch User: reproducible-bui...@lists.alioth.debian.org Usertags: buildpath
embedding the build path in binaries makes it harder to get byte-for-byte reproducibility, because the build has to happen in the same directory. gcc by default embeds the build path in the debug info of C tools (e.g. DW_AT_comp_dir and DW_AT_decl_file). This isn't useful for distributed binary packages, because the build environment isn't on the same machine (or necessarily in the same place). The build path can be mangled/stripped with gcc's -fdebug-prefix-map argument. For example: gcc -fdebug-prefix-map=$(pwd)=. -g -o foo foo.c however, when supplying -fdebug-prefix-map, gcc puts that string itself into DW_AT_producer. The attached patch (pulled from upstream gcc master) avoids storing -fdebug-prefix-map in DW_AT_producer. I'd like this to be backported into debian's gcc so that we can make and test a more reproducible toolchain. (thinking about timing: we shouldn't need the patch once we move to gcc 6, but we should be testing a buildpath-independent reproducible toolchain now; i'll file a bug soon to add this pattern to either dh or dpkg-buildflags) Regards, --dkg -- System Information: Debian Release: stretch/sid Architecture: amd64 (x86_64) Kernel: Linux 4.4.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.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-5 ii cpp-5 5.3.1-12 ii gcc-5-base 5.3.1-12 ii libc6 2.22-3 ii libcc1-0 5.3.1-12 ii libgcc-5-dev 5.3.1-12 ii libgcc1 1:5.3.1-12 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 5.3.1-12 ii zlib1g 1:1.2.8.dfsg-2+b1 Versions of packages gcc-5 recommends: ii libc6-dev 2.22-3 Versions of packages gcc-5 suggests: pn gcc-5-doc <none> pn gcc-5-locales <none> ii gcc-5-multilib 5.3.1-12 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> -- debconf-show failed
>From 6ceddcd7b87911ddbb942923722af5a735dacedc Mon Sep 17 00:00:00 2001 From: bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Fri, 18 Dec 2015 19:48:26 +0000 Subject: [PATCH] Ignore -fdebug-prefix-map in producer string (by Daniel Kahn Gillmor) * dwarf2out.c (gen_producer_string): Ignore -fdebug-prefix-map. testsuite/ * gcc.dg/debug/dwarf2/prod-options.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231835 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 ++++ gcc/dwarf2out.c | 1 + gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c | 12 ++++++++++++ 4 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fec7992..11ee620 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2015-12-18 Daniel Kahn Gillmor <d...@fifthhorseman.net> + + * dwarf2out.c (gen_producer_string): Ignore -fdebug-prefix-map. + 2015-12-18 Nathan Sidwell <nat...@acm.org> * config/nvptx/nvptx.c (nvptx_option_override): Emit sorry for diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 067c4f2..320a077 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -21498,6 +21498,7 @@ gen_producer_string (void) case OPT_fpreprocessed: case OPT_fltrans_output_list_: case OPT_fresolution_: + case OPT_fdebug_prefix_map_: /* Ignore these. */ continue; default: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5da1ce4..b2d9d3b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-12-18 Bernd Schmidt <bschm...@redhat.com> + + * gcc.dg/debug/dwarf2/prod-options.c: New test. + 2015-12-18 Eric Botcazou <ebotca...@adacore.com> * gnat.dg/specs/debug1.ads: Bump final count to 18. diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c b/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c new file mode 100644 index 0000000..21449f9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c @@ -0,0 +1,12 @@ +/* Verify that the DW_AT_producer does not contain certain compiler options + such as -fdebug-prefix-map=; this is undesirable since path names make + the build not reproducible. Other skipped options could be tested here + as well. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -gdwarf -dA -fdebug-prefix-map=a=b" } */ +/* { dg-final { scan-assembler "DW_AT_producer: \"GNU C" } } */ +/* { dg-final { scan-assembler-not "debug-prefix-map" } } */ + +void func (void) +{ +} -- 2.8.0.rc3