* [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec @ 2015-04-17 13:28 Gary Benson 2015-04-27 10:38 ` [PING][PATCH] " Gary Benson 2015-04-27 15:59 ` [PATCH] " Pedro Alves 0 siblings, 2 replies; 8+ messages in thread From: Gary Benson @ 2015-04-17 13:28 UTC (permalink / raw) To: gdb-patches Hi all, This commit updates follow_exec to use exec_file_find to prefix the new executable's filename with gdb_sysroot rather than doing it longhand. Built and regtested on RHEL6.6 x86_64. Ok to commit? Cheers, Gary gdb/ChangeLog: * infrun.c (solist.h): New include. (follow_exec): Use exec_file_find to prefix execd_pathname with gdb_sysroot. --- gdb/ChangeLog | 6 ++++++ gdb/infrun.c | 18 +++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/gdb/infrun.c b/gdb/infrun.c index 7870f70..f09e2da 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -60,6 +60,7 @@ #include "target-descriptions.h" #include "target-dcache.h" #include "terminal.h" +#include "solist.h" /* Prototypes for local functions */ @@ -1133,15 +1134,18 @@ follow_exec (ptid_t ptid, char *execd_pathname) breakpoint_init_inferior (inf_execd); - if (gdb_sysroot && *gdb_sysroot) + if (gdb_sysroot != NULL && *gdb_sysroot != '\0') { - char *name = alloca (strlen (gdb_sysroot) - + strlen (execd_pathname) - + 1); + int fd = -1; + char *name; - strcpy (name, gdb_sysroot); - strcat (name, execd_pathname); - execd_pathname = name; + name = exec_file_find (execd_pathname, &fd); + if (fd >= 0) + close (fd); + + execd_pathname = alloca (strlen (name) + 1); + strcpy (execd_pathname, name); + xfree (name); } /* Reset the shared library package. This ensures that we get a -- 1.7.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PING][PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec 2015-04-17 13:28 [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec Gary Benson @ 2015-04-27 10:38 ` Gary Benson 2015-04-27 15:59 ` [PATCH] " Pedro Alves 1 sibling, 0 replies; 8+ messages in thread From: Gary Benson @ 2015-04-27 10:38 UTC (permalink / raw) To: gdb-patches Ping: https://sourceware.org/ml/gdb-patches/2015-04/msg00674.html Gary Benson wrote: > Hi all, > > This commit updates follow_exec to use exec_file_find to prefix > the new executable's filename with gdb_sysroot rather than doing > it longhand. > > Built and regtested on RHEL6.6 x86_64. > > Ok to commit? > > Cheers, > Gary > > > gdb/ChangeLog: > > * infrun.c (solist.h): New include. > (follow_exec): Use exec_file_find to prefix execd_pathname > with gdb_sysroot. > --- > gdb/ChangeLog | 6 ++++++ > gdb/infrun.c | 18 +++++++++++------- > 2 files changed, 17 insertions(+), 7 deletions(-) > > diff --git a/gdb/infrun.c b/gdb/infrun.c > index 7870f70..f09e2da 100644 > --- a/gdb/infrun.c > +++ b/gdb/infrun.c > @@ -60,6 +60,7 @@ > #include "target-descriptions.h" > #include "target-dcache.h" > #include "terminal.h" > +#include "solist.h" > > /* Prototypes for local functions */ > > @@ -1133,15 +1134,18 @@ follow_exec (ptid_t ptid, char *execd_pathname) > > breakpoint_init_inferior (inf_execd); > > - if (gdb_sysroot && *gdb_sysroot) > + if (gdb_sysroot != NULL && *gdb_sysroot != '\0') > { > - char *name = alloca (strlen (gdb_sysroot) > - + strlen (execd_pathname) > - + 1); > + int fd = -1; > + char *name; > > - strcpy (name, gdb_sysroot); > - strcat (name, execd_pathname); > - execd_pathname = name; > + name = exec_file_find (execd_pathname, &fd); > + if (fd >= 0) > + close (fd); > + > + execd_pathname = alloca (strlen (name) + 1); > + strcpy (execd_pathname, name); > + xfree (name); > } > > /* Reset the shared library package. This ensures that we get a > -- > 1.7.1 > -- http://gbenson.net/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec 2015-04-17 13:28 [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec Gary Benson 2015-04-27 10:38 ` [PING][PATCH] " Gary Benson @ 2015-04-27 15:59 ` Pedro Alves 2015-04-28 11:35 ` Gary Benson 1 sibling, 1 reply; 8+ messages in thread From: Pedro Alves @ 2015-04-27 15:59 UTC (permalink / raw) To: Gary Benson, gdb-patches On 04/17/2015 02:28 PM, Gary Benson wrote: > Hi all, > > This commit updates follow_exec to use exec_file_find to prefix > the new executable's filename with gdb_sysroot rather than doing > it longhand. > > Built and regtested on RHEL6.6 x86_64. > > Ok to commit? OK. > - if (gdb_sysroot && *gdb_sysroot) > + if (gdb_sysroot != NULL && *gdb_sysroot != '\0') > { > - char *name = alloca (strlen (gdb_sysroot) > - + strlen (execd_pathname) > - + 1); > + int fd = -1; > + char *name; > > - strcpy (name, gdb_sysroot); > - strcat (name, execd_pathname); > - execd_pathname = name; > + name = exec_file_find (execd_pathname, &fd); > + if (fd >= 0) > + close (fd); We now have at least two places that need to remember to call close. IWBN if we hid that close in a exec_file_find variant, so that callers didn't have to recall to do it. Maybe rename exec_file_find to (e.g.) exec_file_find_fd and reuse the exec_file_find name, even. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec 2015-04-27 15:59 ` [PATCH] " Pedro Alves @ 2015-04-28 11:35 ` Gary Benson 2015-04-28 11:56 ` Pedro Alves 0 siblings, 1 reply; 8+ messages in thread From: Gary Benson @ 2015-04-28 11:35 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On 04/17/2015 02:28 PM, Gary Benson wrote: > > This commit updates follow_exec to use exec_file_find to prefix > > the new executable's filename with gdb_sysroot rather than doing > > it longhand. > > > > Built and regtested on RHEL6.6 x86_64. > > > > Ok to commit? > > OK. Thanks, I pushed it. > > - if (gdb_sysroot && *gdb_sysroot) > > + if (gdb_sysroot != NULL && *gdb_sysroot != '\0') > > { > > - char *name = alloca (strlen (gdb_sysroot) > > - + strlen (execd_pathname) > > - + 1); > > + int fd = -1; > > + char *name; > > > > - strcpy (name, gdb_sysroot); > > - strcat (name, execd_pathname); > > - execd_pathname = name; > > + name = exec_file_find (execd_pathname, &fd); > > + if (fd >= 0) > > + close (fd); > > We now have at least two places that need to remember to call close. > IWBN if we hid that close in a exec_file_find variant, so that > callers didn't have to recall to do it. Maybe rename exec_file_find > to (e.g.) exec_file_find_fd and reuse the exec_file_find name, even. Good shout. How about I fix solib_find_1 to accept fd == NULL, and put the closing logic in there? That would work for solib_find too then (I'm not sure if there are any "solib_find; close" places in GDB but I'll look.) Cheers, Gary -- http://gbenson.net/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec 2015-04-28 11:35 ` Gary Benson @ 2015-04-28 11:56 ` Pedro Alves 2015-04-28 21:50 ` [PATCH] Allow passing fd == NULL to exec_file_find and solib_find Gary Benson 0 siblings, 1 reply; 8+ messages in thread From: Pedro Alves @ 2015-04-28 11:56 UTC (permalink / raw) To: Gary Benson; +Cc: gdb-patches On 04/28/2015 12:29 PM, Gary Benson wrote: > Pedro Alves wrote: >> We now have at least two places that need to remember to call close. >> IWBN if we hid that close in a exec_file_find variant, so that >> callers didn't have to recall to do it. Maybe rename exec_file_find >> to (e.g.) exec_file_find_fd and reuse the exec_file_find name, even. > > Good shout. How about I fix solib_find_1 to accept fd == NULL, and > put the closing logic in there? That Sounds good. > would work for solib_find too then (I'm not sure if there are > any "solib_find; close" places in GDB but I'll look.) Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] Allow passing fd == NULL to exec_file_find and solib_find 2015-04-28 11:56 ` Pedro Alves @ 2015-04-28 21:50 ` Gary Benson 2015-04-29 11:22 ` Pedro Alves 0 siblings, 1 reply; 8+ messages in thread From: Gary Benson @ 2015-04-28 21:50 UTC (permalink / raw) To: gdb-patches; +Cc: Pedro Alves Hi all, This commit allows NULL to be passed as the int *fd argument to exec_file_find and solib_find to simplify use cases where the caller does not require the file to be opened. Built and regtested on RHEL6.6 x86_64. Ok to commit? Cheers, Gary gdb/ChangeLog: * solib.c (solib_find_1): Allow fd argument to be NULL. (exec_file_find): Update comment. (solib_find): Likewise. * exec.c (exec_file_locate_attach): Use NULL as fd argument to exec_file_find to avoid having to close the opened file. * infrun.c (follow_exec): Likewise. --- gdb/ChangeLog | 10 ++++++++++ gdb/exec.c | 8 +------- gdb/infrun.c | 7 +------ gdb/solib.c | 25 +++++++++++++++++-------- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/gdb/exec.c b/gdb/exec.c index 872b86c..8a4ab6f 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -156,13 +156,7 @@ exec_file_locate_attach (int pid, int from_tty) is absolute then prefix the filename with gdb_sysroot. */ if (gdb_sysroot != NULL && *gdb_sysroot != '\0' && IS_ABSOLUTE_PATH (exec_file)) - { - int fd = -1; - - full_exec_path = exec_file_find (exec_file, &fd); - if (fd >= 0) - close (fd); - } + full_exec_path = exec_file_find (exec_file, NULL); if (full_exec_path == NULL) { diff --git a/gdb/infrun.c b/gdb/infrun.c index f09e2da..a4f0b9f 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1136,12 +1136,7 @@ follow_exec (ptid_t ptid, char *execd_pathname) if (gdb_sysroot != NULL && *gdb_sysroot != '\0') { - int fd = -1; - char *name; - - name = exec_file_find (execd_pathname, &fd); - if (fd >= 0) - close (fd); + char *name = exec_file_find (execd_pathname, NULL); execd_pathname = alloca (strlen (name) + 1); strcpy (execd_pathname, name); diff --git a/gdb/solib.c b/gdb/solib.c index 2466235..358a0a2 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -114,8 +114,9 @@ show_solib_search_path (struct ui_file *file, int from_tty, /* Return the full pathname of a binary file (the main executable or a shared library file), or NULL if not found. The returned - pathname is malloc'ed and must be freed by the caller. *FD is - set to either -1 or an open file handle for the binary file. + pathname is malloc'ed and must be freed by the caller. If FD + is non-NULL, *FD is set to either -1 or an open file handle for + the binary file. Global variable GDB_SYSROOT is used as a prefix directory to search for binary files if they have an absolute path. @@ -254,7 +255,8 @@ solib_find_1 (char *in_pathname, int *fd, int is_solib) /* Handle files to be accessed via the target. */ if (is_target_filename (temp_pathname)) { - *fd = -1; + if (fd != NULL) + *fd = -1; do_cleanups (old_chain); return temp_pathname; } @@ -367,14 +369,21 @@ solib_find_1 (char *in_pathname, int *fd, int is_solib) OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname, O_RDONLY | O_BINARY, &temp_pathname); - *fd = found_file; + if (fd == NULL) + { + if (found_file >= 0) + close (found_file); + } + else + *fd = found_file; + return temp_pathname; } /* Return the full pathname of the main executable, or NULL if not found. The returned pathname is malloc'ed and must be freed by - the caller. *FD is set to either -1 or an open file handle for - the main executable. + the caller. If FD is non-NULL, *FD is set to either -1 or an open + file handle for the main executable. The search algorithm used is described in solib_find_1's comment above. */ @@ -405,8 +414,8 @@ exec_file_find (char *in_pathname, int *fd) /* Return the full pathname of a shared library file, or NULL if not found. The returned pathname is malloc'ed and must be freed by - the caller. *FD is set to either -1 or an open file handle for - the shared library. + the caller. If FD is non-NULL, *FD is set to either -1 or an open + file handle for the shared library. The search algorithm used is described in solib_find_1's comment above. */ -- 1.7.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Allow passing fd == NULL to exec_file_find and solib_find 2015-04-28 21:50 ` [PATCH] Allow passing fd == NULL to exec_file_find and solib_find Gary Benson @ 2015-04-29 11:22 ` Pedro Alves 2015-04-29 15:24 ` Gary Benson 0 siblings, 1 reply; 8+ messages in thread From: Pedro Alves @ 2015-04-29 11:22 UTC (permalink / raw) To: Gary Benson, gdb-patches On 04/28/2015 07:18 PM, Gary Benson wrote: > Hi all, > > This commit allows NULL to be passed as the int *fd argument > to exec_file_find and solib_find to simplify use cases where > the caller does not require the file to be opened. > > Built and regtested on RHEL6.6 x86_64. > > Ok to commit? > OK. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Allow passing fd == NULL to exec_file_find and solib_find 2015-04-29 11:22 ` Pedro Alves @ 2015-04-29 15:24 ` Gary Benson 0 siblings, 0 replies; 8+ messages in thread From: Gary Benson @ 2015-04-29 15:24 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On 04/28/2015 07:18 PM, Gary Benson wrote: > > This commit allows NULL to be passed as the int *fd argument > > to exec_file_find and solib_find to simplify use cases where > > the caller does not require the file to be opened. > > > > Built and regtested on RHEL6.6 x86_64. > > > > Ok to commit? > > OK. Thanks, pushed. Cheers, Gary -- http://gbenson.net/ ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-04-29 14:22 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-04-17 13:28 [PATCH] Use exec_file_find to prepend gdb_sysroot in follow_exec Gary Benson 2015-04-27 10:38 ` [PING][PATCH] " Gary Benson 2015-04-27 15:59 ` [PATCH] " Pedro Alves 2015-04-28 11:35 ` Gary Benson 2015-04-28 11:56 ` Pedro Alves 2015-04-28 21:50 ` [PATCH] Allow passing fd == NULL to exec_file_find and solib_find Gary Benson 2015-04-29 11:22 ` Pedro Alves 2015-04-29 15:24 ` Gary Benson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).