summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/debugedit.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/tools/debugedit.c b/tools/debugedit.c
index cf89312fa..c19a04b4b 100644
--- a/tools/debugedit.c
+++ b/tools/debugedit.c
@@ -926,27 +926,29 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
/* Ensure the CU current directory will exist even if only empty. Source
filenames possibly located in its parent directories refer relatively to
it and the debugger (GDB) cannot safely optimize out the missing
- CU current dir subdirectories. */
- if (comp_dir && list_file_fd != -1)
+ CU current dir subdirectories. Only do this once in phase one. And
+ only do this for dirs under our build/base_dir. Don't output the
+ empty string (in case the comp_dir == base_dir). */
+ if (phase == 0 && base_dir && comp_dir && list_file_fd != -1)
{
char *p;
size_t size;
- if (base_dir && has_prefix (comp_dir, base_dir))
- p = comp_dir + strlen (base_dir);
- else if (dest_dir && has_prefix (comp_dir, dest_dir))
- p = comp_dir + strlen (dest_dir);
- else
- p = comp_dir;
-
- size = strlen (p) + 1;
- while (size > 0)
+ if (has_prefix (comp_dir, base_dir))
{
- ssize_t ret = write (list_file_fd, p, size);
- if (ret == -1)
- break;
- size -= ret;
- p += ret;
+ char *p = comp_dir + strlen (base_dir);
+ if (p[0] != '\0')
+ {
+ size_t size = strlen (p) + 1;
+ while (size > 0)
+ {
+ ssize_t ret = write (list_file_fd, p, size);
+ if (ret == -1)
+ break;
+ size -= ret;
+ p += ret;
+ }
+ }
}
}