diff options
author | Doug Evans <dje@google.com> | 2012-11-16 19:43:39 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2012-11-16 19:43:39 +0000 |
commit | e64e03922ca4da2d3da887a467076eda615c62bd (patch) | |
tree | c3042b366b8557853d7fe30243bd05fd26047bfa /gdb/main.c | |
parent | 79f080079c7ea480a8b16b6d600536e628e558b4 (diff) | |
download | gdb-e64e03922ca4da2d3da887a467076eda615c62bd.zip gdb-e64e03922ca4da2d3da887a467076eda615c62bd.tar.gz gdb-e64e03922ca4da2d3da887a467076eda615c62bd.tar.bz2 |
* main.c (gdb_datadir_provided): New static global.
(get_init_files): If --data-directory is provided,
and SYSTEM_GDBINIT lives in data-directory, look for it there.
* NEWS: Mention it.
doc/
* gdb.texinfo (System-wide configuration): If the system-wide init
file lives in the data-directory, and --data-directory is provided,
look for it there.
Diffstat (limited to 'gdb/main.c')
-rw-r--r-- | gdb/main.c | 39 |
1 files changed, 35 insertions, 4 deletions
@@ -60,6 +60,11 @@ char *gdb_sysroot = 0; /* GDB datadir, used to store data files. */ char *gdb_datadir = 0; +/* Non-zero if GDB_DATADIR was provided on the command line. + This doesn't track whether data-directory is set later from the + command line, but we don't reread system.gdbinit when that happens. */ +static int gdb_datadir_provided = 0; + /* If gdb was configured with --with-python=/path, the possibly relocated path to python's lib directory. */ char *python_libdir = 0; @@ -163,13 +168,38 @@ get_init_files (char **system_gdbinit, if (!initialized) { struct stat homebuf, cwdbuf, s; - char *homedir, *relocated_sysgdbinit; + char *homedir; if (SYSTEM_GDBINIT[0]) { - relocated_sysgdbinit = relocate_path (gdb_program_name, - SYSTEM_GDBINIT, - SYSTEM_GDBINIT_RELOCATABLE); + int datadir_len = strlen (GDB_DATADIR); + int sys_gdbinit_len = strlen (SYSTEM_GDBINIT); + char *relocated_sysgdbinit; + + /* If SYSTEM_GDBINIT lives in data-directory, and data-directory + has been provided, search for SYSTEM_GDBINIT there. */ + if (gdb_datadir_provided + && datadir_len < sys_gdbinit_len + && strncmp (SYSTEM_GDBINIT, GDB_DATADIR, datadir_len) == 0 + && strchr (SLASH_STRING, SYSTEM_GDBINIT[datadir_len]) != NULL) + { + /* Append the part of SYSTEM_GDBINIT that follows GDB_DATADIR + to gdb_datadir. */ + char *tmp_sys_gdbinit = xstrdup (SYSTEM_GDBINIT + datadir_len); + char *p; + + for (p = tmp_sys_gdbinit; strchr (SLASH_STRING, *p); ++p) + continue; + relocated_sysgdbinit = concat (gdb_datadir, SLASH_STRING, p, + NULL); + xfree (tmp_sys_gdbinit); + } + else + { + relocated_sysgdbinit = relocate_path (gdb_program_name, + SYSTEM_GDBINIT, + SYSTEM_GDBINIT_RELOCATABLE); + } if (relocated_sysgdbinit && stat (relocated_sysgdbinit, &s) == 0) sysgdbinit = relocated_sysgdbinit; else @@ -591,6 +621,7 @@ captured_main (void *data) case 'D': xfree (gdb_datadir); gdb_datadir = xstrdup (optarg); + gdb_datadir_provided = 1; break; #ifdef GDBTK case 'z': |