This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PUSHED 1/2] compile: set debug compile: Display GCC driver filename
- From: Sergio Durigan Junior <sergiodj at redhat dot com>
- To: GDB Patches <gdb-patches at sourceware dot org>
- Cc: Sergio Durigan Junior <sergiodj at redhat dot com>, Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Date: Wed, 23 Aug 2017 11:20:06 -0400
- Subject: [PUSHED 1/2] compile: set debug compile: Display GCC driver filename
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=sergiodj at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1F1B5882FB
From: Jan Kratochvil <jan.kratochvil@redhat.com>
Pushed as per: https://sourceware.org/ml/gdb-patches/2015-05/msg00711.html
As discussed in
How to use compile & execute function in GDB
https://sourceware.org/ml/gdb/2015-04/msg00026.html
GDB currently searches for compilers on /usr/bin/ARCH-OS-gcc and
chooses a match from there. However, it is not currently possible for
the user to display which compiler was selected. Up until now, GDB's
compiler interface was not up-to-date with GCC's one, which means that
it wasn't possible to obtain this information. This patch implements
the mechanisms necessary for that.
gdb/ChangeLog
2017-08-23 Jan Kratochvil <jan.kratochvil@redhat.com>
* compile/compile.c (compile_to_object): Conditionally call
set_verbose. Conditionally call compile or compile_v0.
include/ChangeLog
2017-08-23 Jan Kratochvil <jan.kratochvil@redhat.com>
* gcc-interface.h (enum gcc_base_api_version): Add
GCC_FE_VERSION_1.
(struct gcc_base_vtable): Rename compile to compile_v0. Update
comment for compile. New methods set_verbose and compile.
---
gdb/ChangeLog | 5 +++++
gdb/compile/compile.c | 11 +++++++++--
include/ChangeLog | 7 +++++++
include/gcc-interface.h | 36 ++++++++++++++++++++++++++++--------
4 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 77a19c2ff0..d7466d0578 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-23 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * compile/compile.c (compile_to_object): Conditionally call
+ set_verbose. Conditionally call compile or compile_v0.
+
2017-08-07 Weimin Pan <weimin.pan@oracle.com>
* sparc64-tdep.h: (adi_normalize_address): New export.
diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c
index 91e084f89f..36baab3ede 100644
--- a/gdb/compile/compile.c
+++ b/gdb/compile/compile.c
@@ -516,6 +516,9 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
get_args (compiler, gdbarch, &argc, &argv);
gdb_argv argv_holder (argv);
+ if (compiler->fe->ops->version >= GCC_FE_VERSION_1)
+ compiler->fe->ops->set_verbose (compiler->fe, compile_debug);
+
error_message = compiler->fe->ops->set_arguments (compiler->fe, triplet_rx,
argc, argv);
if (error_message != NULL)
@@ -556,8 +559,12 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
/* Call the compiler and start the compilation process. */
compiler->fe->ops->set_source_file (compiler->fe, fnames.source_file ());
- if (!compiler->fe->ops->compile (compiler->fe, fnames.object_file (),
- compile_debug))
+ if (compiler->fe->ops->version >= GCC_FE_VERSION_1)
+ ok = compiler->fe->ops->compile (compiler->fe, fnames.object_file ());
+ else
+ ok = compiler->fe->ops->compile_v0 (compiler->fe, fnames.object_file (),
+ compile_debug);
+ if (!ok)
error (_("Compilation failed."));
if (compile_debug)
diff --git a/include/ChangeLog b/include/ChangeLog
index db500dce93..02ee554b90 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,10 @@
+2017-08-23 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gcc-interface.h (enum gcc_base_api_version): Add
+ GCC_FE_VERSION_1.
+ (struct gcc_base_vtable): Rename compile to compile_v0. Update
+ comment for compile. New methods set_verbose and compile.
+
2017-08-21 Alexander Fedotov <alexander.fedotov@nxp.com>
Edmar Wienskoski <edmar.wienskoski@nxp.com>
diff --git a/include/gcc-interface.h b/include/gcc-interface.h
index d4c4ec6997..c98f078454 100644
--- a/include/gcc-interface.h
+++ b/include/gcc-interface.h
@@ -44,7 +44,10 @@ struct gcc_base_context;
enum gcc_base_api_version
{
- GCC_FE_VERSION_0 = 0
+ GCC_FE_VERSION_0 = 0,
+
+ /* Deprecated method compile_v0. Added method set_verbose and compile. */
+ GCC_FE_VERSION_1 = 1,
};
/* The operations defined by the GCC base API. This is the vtable for
@@ -93,18 +96,35 @@ struct gcc_base_vtable
const char *message),
void *datum);
- /* Perform the compilation. FILENAME is the name of the resulting
- object file. VERBOSE can be set to cause GCC to print some
- information as it works. Returns true on success, false on
- error. */
+ /* Deprecated GCC_FE_VERSION_0 variant of the GCC_FE_VERSION_1
+ compile method. GCC_FE_VERSION_0 version verbose parameter has
+ been replaced by the set_verbose method. */
- int /* bool */ (*compile) (struct gcc_base_context *self,
- const char *filename,
- int /* bool */ verbose);
+ int /* bool */ (*compile_v0) (struct gcc_base_context *self,
+ const char *filename,
+ int /* bool */ verbose);
/* Destroy this object. */
void (*destroy) (struct gcc_base_context *self);
+
+ /* VERBOSE can be set to non-zero to cause GCC to print some
+ information as it works. Calling this method overrides its
+ possible previous calls.
+
+ This method is only available since GCC_FE_VERSION_1. */
+
+ void (*set_verbose) (struct gcc_base_context *self,
+ int /* bool */ verbose);
+
+ /* Perform the compilation. FILENAME is the name of the resulting
+ object file. Either set_triplet_regexp or set_driver_filename must
+ be called before. Returns true on success, false on error.
+
+ This method is only available since GCC_FE_VERSION_1. */
+
+ int /* bool */ (*compile) (struct gcc_base_context *self,
+ const char *filename);
};
/* The GCC object. */
--
2.13.3