diff options
Diffstat (limited to 'gcc/opts.c')
-rw-r--r-- | gcc/opts.c | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -700,19 +700,27 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, enum unwind_info_type ui_except; if (opts->x_dump_base_name - && ! IS_ABSOLUTE_PATH (opts->x_dump_base_name) && ! opts->x_dump_base_name_prefixed) { - /* First try to make OPTS->X_DUMP_BASE_NAME relative to the - OPTS->X_DUMP_DIR_NAME directory. Then try to make - OPTS->X_DUMP_BASE_NAME relative to the OPTS->X_AUX_BASE_NAME - directory, typically the directory to contain the object - file. */ - if (opts->x_dump_dir_name) + const char *sep = opts->x_dump_base_name; + + for (; *sep; sep++) + if (IS_DIR_SEPARATOR (*sep)) + break; + + if (*sep) + /* If dump_base_path contains subdirectories, don't prepend + anything. */; + else if (opts->x_dump_dir_name) + /* We have a DUMP_DIR_NAME, prepend that. */ opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name, opts->x_dump_base_name, NULL); else if (opts->x_aux_base_name && strcmp (opts->x_aux_base_name, HOST_BIT_BUCKET) != 0) + /* AUX_BASE_NAME is set and is not the bit bucket. If it + contains a directory component, prepend those directories. + Typically this places things in the same directory as the + object file. */ { const char *aux_base; @@ -731,7 +739,9 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, opts->x_dump_base_name = new_dump_base_name; } } - opts->x_dump_base_name_prefixed = true; + + /* It is definitely prefixed now. */ + opts->x_dump_base_name_prefixed = true; } /* Handle related options for unit-at-a-time, toplevel-reorder, and |