From: Richard Biener <rguenther@suse.de>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Jeff Law <jeffreyalaw@gmail.com>,
gcc-patches@gcc.gnu.org,
Richard Purdie <richard.purdie@linuxfoundation.org>
Subject: Re: Patch ping - [PATCH] file-prefix-map: Fix up -f*-prefix-map= [PR108464]
Date: Fri, 10 Mar 2023 09:05:31 +0000 (UTC) [thread overview]
Message-ID: <nycvar.YFH.7.77.849.2303100904200.18795@jbgna.fhfr.qr> (raw)
In-Reply-To: <ZArvA85kjSpwBwqc@tucnak>
On Fri, 10 Mar 2023, Jakub Jelinek wrote:
> Hi!
>
> I'd like to ping these patches. All 3 variants have been
> bootstrapped/regtested on x86_64-linux and i686-linux, the last
> one is my preference I guess. The current state breaks e.g. ccache.
>
> https://gcc.gnu.org/pipermail/gcc-patches/2023-January/610285.html
> - PR108464 - P1 - file-prefix-map: Fix up -f*-prefix-map= (3 variants)
Let's go with your preference - I was hoping on comments from Richard
Purdie as of his preference but then ..
Thanks,
Richard.
> Thanks
> Jakub
>
> On Fri, Jan 20, 2023 at 04:05:55PM +0100, Jakub Jelinek via Gcc-patches wrote:
> > On Tue, Nov 01, 2022 at 01:46:20PM -0600, Jeff Law via Gcc-patches wrote:
> > > > This does cause a change of behaviour if users were previously relying upon
> > > > symlinks or absolute paths not being resolved.
> > >
> > > I'm not too worried about this scenario.
> >
> > As mentioned in the PR, this patch breaks e.g. ccache testsuite.
> >
> > I strongly doubt most of the users want such a behavior, because it
> > makes all filenames absolute when -f*-prefix-map= options remap one
> > absolute path to another one.
> > Say if I'm in /tmp and /tmp is the canonical path and there is
> > src/test.c file, with -fdebug-prefix-map=/tmp=/blah
> > previously there would be DW_AT_comp_dir "/blah" and it is still there,
> > but DW_AT_name which was previouly "src/test.c" (relative against
> > DW_AT_comp_dir) is now "/blah/src/test.c" instead.
> >
> > Even worse, the canonicalization is only done on the remap_filename
> > argument, but not on the old_prefix side. That is e.g. what breaks
> > ccache. If there is
> > /tmp/foobar1 directory and
> > ln -sf foobar1 /tmp/foobar2
> > cd /tmp/foobar2
> > then -fdebug-prefix-map=`pwd`:/blah will just not work, while
> > src/test.c will be canonicalized to /tmp/foobar1/src/test.c,
> > old_prefix is still what the user provided which is /tmp/foobar2.
> > User would need to change their uses to use -fdebug-prefix-map=`realpath $(pwd)`=/blah
> >
> > I'm attaching 3 so far just compile tested patches.
> >
> > The first patch just reverts the patch (and its follow-up patch).
> >
> > The second introduces a new option, -f{,no}-canon-prefix-map which affects
> > the behavior of -f{file,macro,debug,profile}-prefix-map=, if on it
> > canonicalizes the old path of the prefix map option and compares that
> > against the canonicalized filename for absolute paths but not relative.
> >
> > And last is like the second, but does that also for relative paths except
> > for filenames with no / (or / or \ on DOS based fs). So, the third patch
> > gets an optional behavior of what has been on the trunk lately with the
> > difference that the old_prefix is canonicalized by the compiler.
> >
> > Initially I've thought I'd just add some magic syntax to the OLD=NEW
> > argument of those options (because there are 4 of them), but as noted
> > in the comments, = is valid char in OLD (just not new), so it would
> > be hard to figure out some syntax. So instead a new option, which one
> > can turn on and off for different -f*-prefix-map= options if needed.
> >
> > -fdebug-prefix-map=/path1=/mypath1 -fcanon-prefix-map \
> > -fdebug-prefix-map=/path2=/mypath2 -fno-canon-prefix-map \
> > -fdebug-prefix-map=/path3=/mypath3
> >
> > will use the old behavior for the /path1 and /path3 handling and
> > the new one only for /path2 handling.
> >
> > Thoughts on this?
> >
> > Jakub
>
> > 2023-01-20 Jakub Jelinek <jakub@redhat.com>
> >
> > PR other/108464
> > * file-prefix-map.cc (remap_filename): Revert 2022-11-01 and 2022-11-07
> > changes.
> >
> > --- gcc/file-prefix-map.cc
> > +++ gcc/file-prefix-map.cc
> > @@ -70,29 +70,19 @@ remap_filename (file_prefix_map *maps, const char *filename)
> > file_prefix_map *map;
> > char *s;
> > const char *name;
> > - char *realname;
> > size_t name_len;
> >
> > - if (!filename || lbasename (filename) == filename)
> > - return filename;
> > -
> > - realname = lrealpath (filename);
> > -
> > for (map = maps; map; map = map->next)
> > - if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
> > + if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
> > break;
> > if (!map)
> > - {
> > - free (realname);
> > - return filename;
> > - }
> > - name = realname + map->old_len;
> > + return filename;
> > + name = filename + map->old_len;
> > name_len = strlen (name) + 1;
> >
> > s = (char *) ggc_alloc_atomic (name_len + map->new_len);
> > memcpy (s, map->new_prefix, map->new_len);
> > memcpy (s + map->new_len, name, name_len);
> > - free (realname);
> > return s;
> > }
> >
>
> > 2023-01-20 Jakub Jelinek <jakub@redhat.com>
> >
> > PR other/108464
> > * common.opt (fcanon-prefix-map): New option.
> > * opts.cc: Include file-prefix-map.h.
> > (flag_canon_prefix_map): New variable.
> > (common_handle_option): Handle OPT_fcanon_prefix_map.
> > (gen_command_line_string): Ignore OPT_fcanon_prefix_map.
> > * file-prefix-map.h (flag_canon_prefix_map): Declare.
> > * file-prefix-map.cc (struct file_prefix_map): Add canonicalize
> > member.
> > (add_prefix_map): Initialize canonicalize member from
> > flag_canon_prefix_map, and if true and old_prefix is absolute
> > pathname, canonicalize it using lrealpath.
> > (remap_filename): Revert 2022-11-01 and 2022-11-07 changes,
> > use lrealpath result only for absolute filenames and only for
> > map->canonicalize map entries.
> > * lto-opts.cc (lto_write_options): Ignore OPT_fcanon_prefix_map.
> > * opts-global.cc (handle_common_deferred_options): Clear
> > flag_canon_prefix_map at the start and handle OPT_fcanon_prefix_map.
> > * doc/invoke.texi (-fcanon-prefix-map): Document.
> > (-ffile-prefix-map, -fdebug-prefix-map, -fprofile-prefix-map): Add
> > see also for -fcanon-prefix-map.
> > * doc/cppopts.texi (-fmacro-prefix-map): Likewise.
> >
> > --- gcc/common.opt.jj 2023-01-09 13:18:28.298019442 +0100
> > +++ gcc/common.opt 2023-01-20 12:43:17.152178057 +0100
> > @@ -1204,6 +1204,10 @@ fchecking=
> > Common Joined RejectNegative UInteger Var(flag_checking)
> > Perform internal consistency checkings.
> >
> > +fcanon-prefix-map
> > +Common Var(common_deferred_options) Defer
> > +For -f*-prefix-map= options compare canonicalized pathnames rather than just strings.
> > +
> > fcode-hoisting
> > Common Var(flag_code_hoisting) Optimization
> > Enable code hoisting.
> > --- gcc/opts.cc.jj 2023-01-02 09:32:52.073856323 +0100
> > +++ gcc/opts.cc 2023-01-20 13:54:53.526705571 +0100
> > @@ -34,10 +34,14 @@ along with GCC; see the file COPYING3.
> > #include "diagnostic-color.h"
> > #include "version.h"
> > #include "selftest.h"
> > +#include "file-prefix-map.h"
> >
> > /* In this file all option sets are explicit. */
> > #undef OPTION_SET_P
> >
> > +/* Set by -fcanon-prefix-map. */
> > +bool flag_canon_prefix_map;
> > +
> > static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff);
> >
> > /* Names of fundamental debug info formats indexed by enum
> > @@ -2812,6 +2816,10 @@ common_handle_option (struct gcc_options
> > /* Deferred. */
> > break;
> >
> > + case OPT_fcanon_prefix_map:
> > + flag_canon_prefix_map = value;
> > + break;
> > +
> > case OPT_fcallgraph_info:
> > opts->x_flag_callgraph_info = CALLGRAPH_INFO_NAKED;
> > break;
> > @@ -3718,6 +3726,7 @@ gen_command_line_string (cl_decoded_opti
> > case OPT_fmacro_prefix_map_:
> > case OPT_ffile_prefix_map_:
> > case OPT_fprofile_prefix_map_:
> > + case OPT_fcanon_prefix_map:
> > case OPT_fcompare_debug:
> > case OPT_fchecking:
> > case OPT_fchecking_:
> > --- gcc/file-prefix-map.h.jj 2023-01-02 09:32:33.258128185 +0100
> > +++ gcc/file-prefix-map.h 2023-01-20 12:44:31.542094469 +0100
> > @@ -22,6 +22,7 @@ void add_macro_prefix_map (const char *)
> > void add_debug_prefix_map (const char *);
> > void add_file_prefix_map (const char *);
> > void add_profile_prefix_map (const char *);
> > +extern bool flag_canon_prefix_map;
> >
> > const char *remap_macro_filename (const char *);
> > const char *remap_debug_filename (const char *);
> > --- gcc/file-prefix-map.cc.jj 2023-01-02 09:32:52.787846007 +0100
> > +++ gcc/file-prefix-map.cc 2023-01-20 13:53:31.568896433 +0100
> > @@ -30,6 +30,7 @@ struct file_prefix_map
> > const char *new_prefix;
> > size_t old_len;
> > size_t new_len;
> > + bool canonicalize;
> > struct file_prefix_map *next;
> > };
> >
> > @@ -51,8 +52,16 @@ add_prefix_map (file_prefix_map *&maps,
> > return;
> > }
> > map = XNEW (file_prefix_map);
> > + map->canonicalize = flag_canon_prefix_map;
> > map->old_prefix = xstrndup (arg, p - arg);
> > map->old_len = p - arg;
> > + if (map->canonicalize && IS_ABSOLUTE_PATH (map->old_prefix))
> > + {
> > + char *realname = lrealpath (map->old_prefix);
> > + free (const_cast <char *> (map->old_prefix));
> > + map->old_prefix = realname;
> > + map->old_len = strlen (realname);
> > + }
> > p++;
> > map->new_prefix = xstrdup (p);
> > map->new_len = strlen (p);
> > @@ -70,23 +79,32 @@ remap_filename (file_prefix_map *maps, c
> > file_prefix_map *map;
> > char *s;
> > const char *name;
> > - char *realname;
> > + char *realname = NULL;
> > size_t name_len;
> >
> > - if (!filename || lbasename (filename) == filename)
> > + if (!filename)
> > return filename;
> >
> > - realname = lrealpath (filename);
> > -
> > + bool absolute = IS_ABSOLUTE_PATH (filename);
> > for (map = maps; map; map = map->next)
> > - if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
> > + if (map->canonicalize && absolute)
> > + {
> > + if (realname == NULL)
> > + realname = lrealpath (filename);
> > + if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
> > + break;
> > + }
> > + else if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
> > break;
> > if (!map)
> > {
> > free (realname);
> > return filename;
> > }
> > - name = realname + map->old_len;
> > + if (map->canonicalize && absolute)
> > + name = realname + map->old_len;
> > + else
> > + name = filename + map->old_len;
> > name_len = strlen (name) + 1;
> >
> > s = (char *) ggc_alloc_atomic (name_len + map->new_len);
> > @@ -97,7 +115,7 @@ remap_filename (file_prefix_map *maps, c
> > }
> >
> > /* NOTE: if adding another -f*-prefix-map option then don't forget to
> > - ignore it in DW_AT_producer (dwarf2out.cc). */
> > + ignore it in DW_AT_producer (gen_command_line_string in opts.cc). */
> >
> > /* Linked lists of file_prefix_map structures. */
> > static file_prefix_map *macro_prefix_maps; /* -fmacro-prefix-map */
> > --- gcc/lto-opts.cc.jj 2023-01-02 09:32:29.547181803 +0100
> > +++ gcc/lto-opts.cc 2023-01-20 13:55:35.010102584 +0100
> > @@ -150,6 +150,7 @@ lto_write_options (void)
> > case OPT_ffile_prefix_map_:
> > case OPT_fmacro_prefix_map_:
> > case OPT_fprofile_prefix_map_:
> > + case OPT_fcanon_prefix_map:
> > case OPT_fwhole_program:
> > continue;
> >
> > --- gcc/opts-global.cc.jj 2023-01-02 09:32:35.169100574 +0100
> > +++ gcc/opts-global.cc 2023-01-20 13:38:31.174977423 +0100
> > @@ -364,6 +364,7 @@ handle_common_deferred_options (void)
> > if (flag_opt_info)
> > opt_info_switch_p (NULL);
> >
> > + flag_canon_prefix_map = false;
> > FOR_EACH_VEC_ELT (v, i, opt)
> > {
> > switch (opt->opt_index)
> > @@ -392,6 +393,10 @@ handle_common_deferred_options (void)
> > add_profile_prefix_map (opt->arg);
> > break;
> >
> > + case OPT_fcanon_prefix_map:
> > + flag_canon_prefix_map = opt->value;
> > + break;
> > +
> > case OPT_fdump_:
> > g->get_dumps ()->dump_switch_p (opt->arg);
> > break;
> > --- gcc/doc/invoke.texi.jj 2023-01-16 11:52:16.115733593 +0100
> > +++ gcc/doc/invoke.texi 2023-01-20 14:44:47.514203801 +0100
> > @@ -191,7 +191,7 @@ in the following sections.
> > -dumpdir @var{dumppfx} -x @var{language} @gol
> > -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help --version @gol
> > -pass-exit-codes -pipe -specs=@var{file} -wrapper @gol
> > -@@@var{file} -ffile-prefix-map=@var{old}=@var{new} @gol
> > +@@@var{file} -ffile-prefix-map=@var{old}=@var{new} -fcanon-prefix-map @gol
> > -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol
> > -fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -fdump-go-spec=@var{file}}
> >
> > @@ -2203,9 +2203,20 @@ files resided in directory @file{@var{ne
> > option is equivalent to specifying all the individual
> > @option{-f*-prefix-map} options. This can be used to make reproducible
> > builds that are location independent. Directories referenced by
> > -directives are not affected by these options. See also
> > -@option{-fmacro-prefix-map}, @option{-fdebug-prefix-map} and
> > -@option{-fprofile-prefix-map}.
> > +directives are not affected by these options. See also
> > +@option{-fmacro-prefix-map}, @option{-fdebug-prefix-map},
> > +@option{-fprofile-prefix-map} and @option{-fcanon-prefix-map}.
> > +
> > +@item -fcanon-prefix-map
> > +@opindex fcanon-prefix-map
> > +For the @option{-f*-prefix-map} options normally comparison
> > +of @file{@var{old}} prefix against the filename that would be normally
> > +referenced in the result of the compilation is done using textual
> > +comparison of the prefixes, or ignoring character case for case insensitive
> > +filesystems and considering slashes and backslashes as equal on DOS based
> > +filesystems. The @option{-fcanon-prefix-map} causes such comparisons
> > +to be done for absolute pathnames on canonicalized paths of @file{@var{old}}
> > +and the referenced filename.
> >
> > @item -fplugin=@var{name}.so
> > @opindex fplugin
> > @@ -11289,7 +11300,8 @@ build-time path with an install-time pat
> > also be used to change an absolute path to a relative path by using
> > @file{.} for @var{new}. This can give more reproducible builds, which
> > are location independent, but may require an extra command to tell GDB
> > -where to find the source files. See also @option{-ffile-prefix-map}.
> > +where to find the source files. See also @option{-ffile-prefix-map}
> > +and @option{-fcanon-prefix-map}.
> >
> > @item -fvar-tracking
> > @opindex fvar-tracking
> > @@ -16466,7 +16478,7 @@ When compiling files residing in directo
> > profiling information (with @option{--coverage})
> > describing them as if the files resided in
> > directory @file{@var{new}} instead.
> > -See also @option{-ffile-prefix-map}.
> > +See also @option{-ffile-prefix-map} and @option{-fcanon-prefix-map}.
> >
> > @item -fprofile-update=@var{method}
> > @opindex fprofile-update
> > --- gcc/doc/cppopts.texi.jj 2023-01-16 11:52:16.102733784 +0100
> > +++ gcc/doc/cppopts.texi 2023-01-20 14:45:09.106890233 +0100
> > @@ -305,7 +305,7 @@ to change an absolute path to a relative
> > @var{new} which can result in more reproducible builds that are
> > location independent. This option also affects
> > @code{__builtin_FILE()} during compilation. See also
> > -@option{-ffile-prefix-map}.
> > +@option{-ffile-prefix-map} and @option{-fcanon-prefix-map}.
> >
> > @item -fexec-charset=@var{charset}
> > @opindex fexec-charset
>
> > 2023-01-20 Jakub Jelinek <jakub@redhat.com>
> >
> > PR other/108464
> > * common.opt (fcanon-prefix-map): New option.
> > * opts.cc: Include file-prefix-map.h.
> > (flag_canon_prefix_map): New variable.
> > (common_handle_option): Handle OPT_fcanon_prefix_map.
> > (gen_command_line_string): Ignore OPT_fcanon_prefix_map.
> > * file-prefix-map.h (flag_canon_prefix_map): Declare.
> > * file-prefix-map.cc (struct file_prefix_map): Add canonicalize
> > member.
> > (add_prefix_map): Initialize canonicalize member from
> > flag_canon_prefix_map, and if true canonicalize it using lrealpath.
> > (remap_filename): Revert 2022-11-01 and 2022-11-07 changes,
> > use lrealpath result only for map->canonicalize map entries.
> > * lto-opts.cc (lto_write_options): Ignore OPT_fcanon_prefix_map.
> > * opts-global.cc (handle_common_deferred_options): Clear
> > flag_canon_prefix_map at the start and handle OPT_fcanon_prefix_map.
> > * doc/invoke.texi (-fcanon-prefix-map): Document.
> > (-ffile-prefix-map, -fdebug-prefix-map, -fprofile-prefix-map): Add
> > see also for -fcanon-prefix-map.
> > * doc/cppopts.texi (-fmacro-prefix-map): Likewise.
> >
> > --- gcc/common.opt.jj 2023-01-09 13:18:28.298019442 +0100
> > +++ gcc/common.opt 2023-01-20 12:43:17.152178057 +0100
> > @@ -1204,6 +1204,10 @@ fchecking=
> > Common Joined RejectNegative UInteger Var(flag_checking)
> > Perform internal consistency checkings.
> >
> > +fcanon-prefix-map
> > +Common Var(common_deferred_options) Defer
> > +For -f*-prefix-map= options compare canonicalized pathnames rather than just strings.
> > +
> > fcode-hoisting
> > Common Var(flag_code_hoisting) Optimization
> > Enable code hoisting.
> > --- gcc/opts.cc.jj 2023-01-02 09:32:52.073856323 +0100
> > +++ gcc/opts.cc 2023-01-20 13:54:53.526705571 +0100
> > @@ -34,10 +34,14 @@ along with GCC; see the file COPYING3.
> > #include "diagnostic-color.h"
> > #include "version.h"
> > #include "selftest.h"
> > +#include "file-prefix-map.h"
> >
> > /* In this file all option sets are explicit. */
> > #undef OPTION_SET_P
> >
> > +/* Set by -fcanon-prefix-map. */
> > +bool flag_canon_prefix_map;
> > +
> > static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff);
> >
> > /* Names of fundamental debug info formats indexed by enum
> > @@ -2812,6 +2816,10 @@ common_handle_option (struct gcc_options
> > /* Deferred. */
> > break;
> >
> > + case OPT_fcanon_prefix_map:
> > + flag_canon_prefix_map = value;
> > + break;
> > +
> > case OPT_fcallgraph_info:
> > opts->x_flag_callgraph_info = CALLGRAPH_INFO_NAKED;
> > break;
> > @@ -3718,6 +3726,7 @@ gen_command_line_string (cl_decoded_opti
> > case OPT_fmacro_prefix_map_:
> > case OPT_ffile_prefix_map_:
> > case OPT_fprofile_prefix_map_:
> > + case OPT_fcanon_prefix_map:
> > case OPT_fcompare_debug:
> > case OPT_fchecking:
> > case OPT_fchecking_:
> > --- gcc/file-prefix-map.h.jj 2023-01-02 09:32:33.258128185 +0100
> > +++ gcc/file-prefix-map.h 2023-01-20 12:44:31.542094469 +0100
> > @@ -22,6 +22,7 @@ void add_macro_prefix_map (const char *)
> > void add_debug_prefix_map (const char *);
> > void add_file_prefix_map (const char *);
> > void add_profile_prefix_map (const char *);
> > +extern bool flag_canon_prefix_map;
> >
> > const char *remap_macro_filename (const char *);
> > const char *remap_debug_filename (const char *);
> > --- gcc/file-prefix-map.cc.jj 2023-01-02 09:32:52.787846007 +0100
> > +++ gcc/file-prefix-map.cc 2023-01-20 15:42:30.661088219 +0100
> > @@ -30,6 +30,7 @@ struct file_prefix_map
> > const char *new_prefix;
> > size_t old_len;
> > size_t new_len;
> > + bool canonicalize;
> > struct file_prefix_map *next;
> > };
> >
> > @@ -51,8 +52,16 @@ add_prefix_map (file_prefix_map *&maps,
> > return;
> > }
> > map = XNEW (file_prefix_map);
> > + map->canonicalize = flag_canon_prefix_map;
> > map->old_prefix = xstrndup (arg, p - arg);
> > map->old_len = p - arg;
> > + if (map->canonicalize)
> > + {
> > + char *realname = lrealpath (map->old_prefix);
> > + free (const_cast <char *> (map->old_prefix));
> > + map->old_prefix = realname;
> > + map->old_len = strlen (realname);
> > + }
> > p++;
> > map->new_prefix = xstrdup (p);
> > map->new_len = strlen (p);
> > @@ -70,34 +79,49 @@ remap_filename (file_prefix_map *maps, c
> > file_prefix_map *map;
> > char *s;
> > const char *name;
> > - char *realname;
> > + const char *realname = NULL;
> > size_t name_len;
> >
> > - if (!filename || lbasename (filename) == filename)
> > + if (!filename)
> > return filename;
> >
> > - realname = lrealpath (filename);
> > -
> > for (map = maps; map; map = map->next)
> > - if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
> > + if (map->canonicalize)
> > + {
> > + if (realname == NULL)
> > + {
> > + if (lbasename (filename) == filename)
> > + realname = filename;
> > + else
> > + realname = lrealpath (filename);
> > + }
> > + if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
> > + break;
> > + }
> > + else if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
> > break;
> > if (!map)
> > {
> > - free (realname);
> > + if (realname != filename)
> > + free (const_cast <char *> (realname));
> > return filename;
> > }
> > - name = realname + map->old_len;
> > + if (map->canonicalize)
> > + name = realname + map->old_len;
> > + else
> > + name = filename + map->old_len;
> > name_len = strlen (name) + 1;
> >
> > s = (char *) ggc_alloc_atomic (name_len + map->new_len);
> > memcpy (s, map->new_prefix, map->new_len);
> > memcpy (s + map->new_len, name, name_len);
> > - free (realname);
> > + if (realname != filename)
> > + free (const_cast <char *> (realname));
> > return s;
> > }
> >
> > /* NOTE: if adding another -f*-prefix-map option then don't forget to
> > - ignore it in DW_AT_producer (dwarf2out.cc). */
> > + ignore it in DW_AT_producer (gen_command_line_string in opts.cc). */
> >
> > /* Linked lists of file_prefix_map structures. */
> > static file_prefix_map *macro_prefix_maps; /* -fmacro-prefix-map */
> > --- gcc/lto-opts.cc.jj 2023-01-02 09:32:29.547181803 +0100
> > +++ gcc/lto-opts.cc 2023-01-20 13:55:35.010102584 +0100
> > @@ -150,6 +150,7 @@ lto_write_options (void)
> > case OPT_ffile_prefix_map_:
> > case OPT_fmacro_prefix_map_:
> > case OPT_fprofile_prefix_map_:
> > + case OPT_fcanon_prefix_map:
> > case OPT_fwhole_program:
> > continue;
> >
> > --- gcc/opts-global.cc.jj 2023-01-02 09:32:35.169100574 +0100
> > +++ gcc/opts-global.cc 2023-01-20 13:38:31.174977423 +0100
> > @@ -364,6 +364,7 @@ handle_common_deferred_options (void)
> > if (flag_opt_info)
> > opt_info_switch_p (NULL);
> >
> > + flag_canon_prefix_map = false;
> > FOR_EACH_VEC_ELT (v, i, opt)
> > {
> > switch (opt->opt_index)
> > @@ -392,6 +393,10 @@ handle_common_deferred_options (void)
> > add_profile_prefix_map (opt->arg);
> > break;
> >
> > + case OPT_fcanon_prefix_map:
> > + flag_canon_prefix_map = opt->value;
> > + break;
> > +
> > case OPT_fdump_:
> > g->get_dumps ()->dump_switch_p (opt->arg);
> > break;
> > --- gcc/doc/invoke.texi.jj 2023-01-16 11:52:16.115733593 +0100
> > +++ gcc/doc/invoke.texi 2023-01-20 14:44:47.514203801 +0100
> > @@ -191,7 +191,7 @@ in the following sections.
> > -dumpdir @var{dumppfx} -x @var{language} @gol
> > -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help --version @gol
> > -pass-exit-codes -pipe -specs=@var{file} -wrapper @gol
> > -@@@var{file} -ffile-prefix-map=@var{old}=@var{new} @gol
> > +@@@var{file} -ffile-prefix-map=@var{old}=@var{new} -fcanon-prefix-map @gol
> > -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol
> > -fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -fdump-go-spec=@var{file}}
> >
> > @@ -2203,9 +2203,20 @@ files resided in directory @file{@var{ne
> > option is equivalent to specifying all the individual
> > @option{-f*-prefix-map} options. This can be used to make reproducible
> > builds that are location independent. Directories referenced by
> > -directives are not affected by these options. See also
> > -@option{-fmacro-prefix-map}, @option{-fdebug-prefix-map} and
> > -@option{-fprofile-prefix-map}.
> > +directives are not affected by these options. See also
> > +@option{-fmacro-prefix-map}, @option{-fdebug-prefix-map},
> > +@option{-fprofile-prefix-map} and @option{-fcanon-prefix-map}.
> > +
> > +@item -fcanon-prefix-map
> > +@opindex fcanon-prefix-map
> > +For the @option{-f*-prefix-map} options normally comparison
> > +of @file{@var{old}} prefix against the filename that would be normally
> > +referenced in the result of the compilation is done using textual
> > +comparison of the prefixes, or ignoring character case for case insensitive
> > +filesystems and considering slashes and backslashes as equal on DOS based
> > +filesystems. The @option{-fcanon-prefix-map} causes such comparisons
> > +to be done on canonicalized paths of @file{@var{old}}
> > +and the referenced filename.
> >
> > @item -fplugin=@var{name}.so
> > @opindex fplugin
> > @@ -11289,7 +11300,8 @@ build-time path with an install-time pat
> > also be used to change an absolute path to a relative path by using
> > @file{.} for @var{new}. This can give more reproducible builds, which
> > are location independent, but may require an extra command to tell GDB
> > -where to find the source files. See also @option{-ffile-prefix-map}.
> > +where to find the source files. See also @option{-ffile-prefix-map}
> > +and @option{-fcanon-prefix-map}.
> >
> > @item -fvar-tracking
> > @opindex fvar-tracking
> > @@ -16466,7 +16478,7 @@ When compiling files residing in directo
> > profiling information (with @option{--coverage})
> > describing them as if the files resided in
> > directory @file{@var{new}} instead.
> > -See also @option{-ffile-prefix-map}.
> > +See also @option{-ffile-prefix-map} and @option{-fcanon-prefix-map}.
> >
> > @item -fprofile-update=@var{method}
> > @opindex fprofile-update
> > --- gcc/doc/cppopts.texi.jj 2023-01-16 11:52:16.102733784 +0100
> > +++ gcc/doc/cppopts.texi 2023-01-20 14:45:09.106890233 +0100
> > @@ -305,7 +305,7 @@ to change an absolute path to a relative
> > @var{new} which can result in more reproducible builds that are
> > location independent. This option also affects
> > @code{__builtin_FILE()} during compilation. See also
> > -@option{-ffile-prefix-map}.
> > +@option{-ffile-prefix-map} and @option{-fcanon-prefix-map}.
> >
> > @item -fexec-charset=@var{charset}
> > @opindex fexec-charset
>
>
--
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)
next prev parent reply other threads:[~2023-03-10 9:05 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-17 12:15 [PATCH 1/2] gcc/file-prefix-map: Allow remapping of relative paths Richard Purdie
2022-08-17 12:15 ` [PATCH 2/2] libcpp: Avoid remapping filenames within directives Richard Purdie
2022-08-17 14:19 ` Richard Purdie
2022-11-01 19:32 ` Jeff Law
2022-11-02 10:52 ` Richard Purdie
2022-11-01 19:46 ` [PATCH 1/2] gcc/file-prefix-map: Allow remapping of relative paths Jeff Law
2023-01-19 13:06 ` Jakub Jelinek
2023-01-20 15:05 ` [PATCH] file-prefix-map: Fix up -f*-prefix-map= [PR108464] Jakub Jelinek
2023-01-23 15:39 ` Jakub Jelinek
2023-03-10 8:49 ` Patch ping - " Jakub Jelinek
2023-03-10 9:05 ` Richard Biener [this message]
2023-03-10 10:14 ` Richard Purdie
2022-11-04 9:12 ` [PATCH 1/2] gcc/file-prefix-map: Allow remapping of relative paths Eric Botcazou
2022-11-04 17:21 ` Richard Purdie
2022-11-07 8:01 ` Eric Botcazou
2022-11-07 16:21 ` Jeff Law
2022-11-07 16:36 ` Eric Botcazou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=nycvar.YFH.7.77.849.2303100904200.18795@jbgna.fhfr.qr \
--to=rguenther@suse.de \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=jeffreyalaw@gmail.com \
--cc=richard.purdie@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).