12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /* Remap file names for debug info for GNU assembler.
- Copyright (C) 2007-2022 Free Software Foundation, Inc.
- This file is part of GAS, the GNU Assembler.
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
- #include "as.h"
- #include "filenames.h"
- /* Structure recording the mapping from source file and directory
- names at compile time to those to be embedded in debug
- information. */
- typedef struct debug_prefix_map
- {
- const char *old_prefix;
- const char *new_prefix;
- size_t old_len;
- size_t new_len;
- struct debug_prefix_map *next;
- } debug_prefix_map;
- /* Linked list of such structures. */
- debug_prefix_map *debug_prefix_maps;
- /* Record a debug file prefix mapping. ARG is the argument to
- -fdebug-prefix-map and must be of the form OLD=NEW. */
- void
- add_debug_prefix_map (const char *arg)
- {
- debug_prefix_map *map;
- const char *p;
- char *o;
- p = strchr (arg, '=');
- if (!p)
- {
- as_fatal (_("invalid argument '%s' to -fdebug-prefix-map"), arg);
- return;
- }
- map = XNEW (debug_prefix_map);
- o = xstrdup (arg);
- map->old_prefix = o;
- map->old_len = p - arg;
- o[map->old_len] = 0;
- p++;
- map->new_prefix = xstrdup (p);
- map->new_len = strlen (p);
- map->next = debug_prefix_maps;
- debug_prefix_maps = map;
- }
- /* Perform user-specified mapping of debug filename prefixes. Returns
- a newly allocated buffer containing the name corresponding to FILENAME.
- It is the caller's responsibility to free the buffer. */
- const char *
- remap_debug_filename (const char *filename)
- {
- debug_prefix_map *map;
- for (map = debug_prefix_maps; map; map = map->next)
- if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
- {
- const char *name = filename + map->old_len;
- return concat (map->new_prefix, name, NULL);
- }
-
- return xstrdup (filename);
- }
|