I just found a related patch again that we have in NetBSD's gcc that allows fixing __FILE__ references.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47047 No progress since 2010 in getting this included though :( Thomas On Thu, Dec 10, 2015 at 12:36:18PM -0500, Daniel Kahn Gillmor wrote: > Work on the reproducible-builds project [0] has identified that build > paths are one cause of output variation between builds. This > changeset allows users to avoid this variation when building C objects > with debug symbols, while leaving the default behavior unchanged. > > Background > ---------- > > gcc includes the build path in any generated DWARF debugging symbols, > specifically in DW_AT_comp_dir, but allows the embedded path to be > changed via -fdebug-prefix-map. > > When -fdebug-prefix-map is used with the current build path, it > removes the build path from DW_AT_comp_dir but places it instead in > DW_AT_producer, so the reproducibility problem isn't resolved. > > When building software for binary redistribution, the actual build > path on the build machine is irrelevant, and doesn't need to be > exposed in the debug symbols. > > Resolution > ---------- > > This patch extends the first argument to -fdebug-prefix-map ("old") to > be able to read from the environment, which allows a packager to avoid > embedded build paths in the debugging symbols with something like: > > export SOURCE_BUILD_DIR="$(pwd)" > gcc -fdebug-prefix-map=\$SOURCE_BUILD_DIR=/usr/src > > Details > ------- > > Specifically, if the first character of the "old" argument is a > literal $, then gcc will treat it as an environment variable name, and > use the value of the env var for prefix mapping. > > As a result, DW_AT_producer contains the literal envvar name, > DW_AT_comp_dir contains the transformed build path, and the actual > build path is not at all present in the generated object file. > > This has been tested successfully on amd64 machines, and i see no > reason why it would be platform-specific. > > More discussion of alternate approaches considered and discarded in > the development of this change can be found at [1] for those > interested. > > Feedback welcome! > > [0] https://reproducible-builds.org > [1] > https://lists.alioth.debian.org/pipermail/reproducible-builds/Week-of-Mon-20151130/004051.html > --- > gcc/doc/invoke.texi | 4 +++- > gcc/final.c | 27 +++++++++++++++++++++++++-- > 2 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 5256031..234432f 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -6440,7 +6440,9 @@ link processing time. Merging is enabled by default. > @item -fdebug-prefix-map=@var{old}=@var{new} > @opindex fdebug-prefix-map > When compiling files in directory @file{@var{old}}, record debugging > -information describing them as in @file{@var{new}} instead. > +information describing them as in @file{@var{new}} instead. If > +@file{@var{old}} starts with a @samp{$}, the corresponding environment > +variable will be dereferenced, and its value will be used instead. > > @item -fno-dwarf2-cfi-asm > @opindex fdwarf2-cfi-asm > diff --git a/gcc/final.c b/gcc/final.c > index 8cb5533..bc43b61 100644 > --- a/gcc/final.c > +++ b/gcc/final.c > @@ -1525,6 +1525,9 @@ add_debug_prefix_map (const char *arg) > { > debug_prefix_map *map; > const char *p; > + char *env; > + const char *old; > + size_t oldlen; > > p = strchr (arg, '='); > if (!p) > @@ -1532,9 +1535,29 @@ add_debug_prefix_map (const char *arg) > error ("invalid argument %qs to -fdebug-prefix-map", arg); > return; > } > + if (*arg == '$') > + { > + env = xstrndup (arg+1, p - (arg+1)); > + old = getenv(env); > + if (!old) > + { > + warning (0, "environment variable %qs not set in argument to " > + "-fdebug-prefix-map", env); > + free(env); > + return; > + } > + oldlen = strlen(old); > + free(env); > + } > + else > + { > + old = xstrndup (arg, p - arg); > + oldlen = p - arg; > + } > + > map = XNEW (debug_prefix_map); > - map->old_prefix = xstrndup (arg, p - arg); > - map->old_len = p - arg; > + map->old_prefix = old; > + map->old_len = oldlen; > p++; > map->new_prefix = xstrdup (p); > map->new_len = strlen (p); > -- > 2.6.2 > > _______________________________________________ > rb-gene...@lists.reproducible-builds.org mailing list > > To unsubscribe or change your options, please visit: > https://lists.reproducible-builds.org/listinfo/rb-general >