compile: set debug compile: Display GCC driver filename

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.
This commit is contained in:
Jan Kratochvil
2017-02-21 13:32:55 -08:00
committed by Sergio Durigan Junior
parent f6a36b0c9e
commit e68c32d53e
4 changed files with 49 additions and 10 deletions

View File

@ -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> 2017-08-07 Weimin Pan <weimin.pan@oracle.com>
* sparc64-tdep.h: (adi_normalize_address): New export. * sparc64-tdep.h: (adi_normalize_address): New export.

View File

@ -516,6 +516,9 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
get_args (compiler, gdbarch, &argc, &argv); get_args (compiler, gdbarch, &argc, &argv);
gdb_argv argv_holder (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, error_message = compiler->fe->ops->set_arguments (compiler->fe, triplet_rx,
argc, argv); argc, argv);
if (error_message != NULL) 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. */ /* Call the compiler and start the compilation process. */
compiler->fe->ops->set_source_file (compiler->fe, fnames.source_file ()); compiler->fe->ops->set_source_file (compiler->fe, fnames.source_file ());
if (!compiler->fe->ops->compile (compiler->fe, fnames.object_file (), if (compiler->fe->ops->version >= GCC_FE_VERSION_1)
compile_debug)) 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.")); error (_("Compilation failed."));
if (compile_debug) if (compile_debug)

View File

@ -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> 2017-08-21 Alexander Fedotov <alexander.fedotov@nxp.com>
Edmar Wienskoski <edmar.wienskoski@nxp.com> Edmar Wienskoski <edmar.wienskoski@nxp.com>

View File

@ -44,7 +44,10 @@ struct gcc_base_context;
enum gcc_base_api_version 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 /* The operations defined by the GCC base API. This is the vtable for
@ -93,18 +96,35 @@ struct gcc_base_vtable
const char *message), const char *message),
void *datum); void *datum);
/* Perform the compilation. FILENAME is the name of the resulting /* Deprecated GCC_FE_VERSION_0 variant of the GCC_FE_VERSION_1
object file. VERBOSE can be set to cause GCC to print some compile method. GCC_FE_VERSION_0 version verbose parameter has
information as it works. Returns true on success, false on been replaced by the set_verbose method. */
error. */
int /* bool */ (*compile) (struct gcc_base_context *self, int /* bool */ (*compile_v0) (struct gcc_base_context *self,
const char *filename, const char *filename,
int /* bool */ verbose); int /* bool */ verbose);
/* Destroy this object. */ /* Destroy this object. */
void (*destroy) (struct gcc_base_context *self); 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. */ /* The GCC object. */