aboutsummaryrefslogtreecommitdiff
path: root/gcc/file-prefix-map.h
AgeCommit message (Collapse)AuthorFilesLines
2024-01-03Update copyright years.Jakub Jelinek1-1/+1
2023-03-10file-prefix-map: Fix up -f*-prefix-map= [PR108464]Jakub Jelinek1-0/+1
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've created 3 patches for this. 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. This commit is the third patch described above. 2023-03-10 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.
2023-01-02Update copyright years.Jakub Jelinek1-1/+1
2022-01-03Update copyright years.Jakub Jelinek1-1/+1
2021-12-02Implement -fprofile-prefix-map.Martin Liska1-0/+2
PR gcov-profile/96092 gcc/ChangeLog: * common.opt: New option. * coverage.c (coverage_begin_function): Emit filename with remap_profile_filename. * doc/invoke.texi: Document the new option. * file-prefix-map.c (add_profile_prefix_map): New. (remap_profile_filename): Likewise. * file-prefix-map.h (add_profile_prefix_map): Likewise. (remap_profile_filename): Likewise. * lto-opts.c (lto_write_options): Handle OPT_fprofile_prefix_map_. * opts-global.c (handle_common_deferred_options): Likewise. * opts.c (common_handle_option): Likewise. (gen_command_line_string): Likewise. * profile.c (output_location): Emit filename with remap_profile_filename.
2021-01-04Update copyright years.Jakub Jelinek1-1/+1
2020-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r279813
2019-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r267494
2018-01-18Add ability to remap file names in __FILE__, etc (PR other/70268)Boris Kolpackov1-0/+28
This commit adds the -fmacro-prefix-map option that allows remapping of file names in __FILE__, __BASE_FILE__, and __builtin_FILE(), similar to how -fdebug-prefix-map allows to do the same for debug information. Additionally, it adds -ffile-prefix-map which can be used to specify both mappings with a single option (and, should we need to add more -f*-prefix-map options in the future, those as well). libcpp/ChangeLog: 2018-01-18 Boris Kolpackov <boris@codesynthesis.com> PR other/70268 * include/cpplib.h (cpp_callbacks::remap_filename): New callback. * libcpp/macro.c (_cpp_builtin_macro_text): Call remap_filename for __FILE__ and __BASE_FILE__. gcc/ChangeLog: 2018-01-18 Boris Kolpackov <boris@codesynthesis.com> PR other/70268 * common.opt: (-ffile-prefix-map): New option. * opts.c (common_handle_option): Defer it. * opts-global.c (handle_common_deferred_options): Handle it. * debug.h (remap_debug_filename, add_debug_prefix_map): Move to... * file-prefix-map.h: New file. (remap_debug_filename, add_debug_prefix_map): ...here. (add_macro_prefix_map, add_file_prefix_map, remap_macro_filename): New. * final.c (debug_prefix_map, add_debug_prefix_map remap_debug_filename): Move to... * file-prefix-map.c: New file. (file_prefix_map, add_prefix_map, remap_filename) ...here and rename, generalize, get rid of alloca(), use strrchr() instead of strchr(). (add_macro_prefix_map, add_debug_prefix_map, add_file_prefix_map): Implement in terms of add_prefix_map(). (remap_macro_filename, remap_debug_filename): Implement in term of remap_filename(). * Makefile.in (OBJS, PLUGIN_HEADERS): Add new files. * builtins.c (fold_builtin_FILE): Call remap_macro_filename(). * dbxout.c: Include file-prefix-map.h. * varasm.c: Likewise. * vmsdbgout.c: Likewise. * xcoffout.c: Likewise. * dwarf2out.c: Likewise plus omit new options from DW_AT_producer. * doc/cppopts.texi (-fmacro-prefix-map): Document. * doc/invoke.texi (-ffile-prefix-map): Document. (-fdebug-prefix-map): Update description. gcc/c-family/ChangeLog: 2018-01-18 Boris Kolpackov <boris@codesynthesis.com> PR other/70268 * c-family/c.opt (-fmacro-prefix-map): New option. * c-family/c-opts.c (c_common_handle_option): Handle it. * c-family/c-lex.c (init_c_lex): Set remap_filename cpp callback. * c-family/c-ppoutput.c (init_pp_output): Likewise. gcc/testsuite/ChangeLog: 2018-01-18 Boris Kolpackov <boris@codesynthesis.com> PR other/70268 * c-c++-common/ffile-prefix-map.c: New test. * c-c++-common/fmacro-prefix-map.c: New test. * c-c++-common/cpp/ffile-prefix-map.c: New test. * c-c++-common/cpp/fmacro-prefix-map.c: New test. From-SVN: r256847