compile: Add 'set compile-gcc'

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 override which compiler to use.  This is what this patch
implements.

It is also a sync between GCC's and GDB's interfaces.

gdb/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* NEWS (Changes since GDB 7.9): Add set compile-gcc and show
	compile-gcc.
	* compile/compile.c (compile_gcc, show_compile_gcc): New.
	(compile_to_object): Implement compile_gcc.
	(_initialize_compile): Install "set compile-gcc".  Initialize
	compile_gcc.

gdb/doc/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.texinfo (Compiling and Injecting Code): Add to subsection
	"Compiler search for the compile command" descriptions of set
	compile-gcc and show compile-gcc.

include/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gcc-interface.h (enum gcc_base_api_version): Update comment for
	GCC_FE_VERSION_1.
	(struct gcc_base_vtable): Rename set_arguments to set_arguments_v0.
	Add set_arguments, set_triplet_regexp and set_driver_filename.
This commit is contained in:
Jan Kratochvil 2017-02-21 13:32:56 -08:00 committed by Sergio Durigan Junior
parent e68c32d53e
commit 6e41ddec97
7 changed files with 155 additions and 31 deletions

View file

@ -46,7 +46,9 @@ enum gcc_base_api_version
{
GCC_FE_VERSION_0 = 0,
/* Deprecated method compile_v0. Added method set_verbose and compile. */
/* Deprecated methods set_arguments_v0 and compile_v0. Added methods
set_arguments, set_triplet_regexp, set_driver_filename, set_verbose and
compile. */
GCC_FE_VERSION_1 = 1,
};
@ -67,20 +69,12 @@ struct gcc_base_vtable
unsigned int version;
/* Set the compiler's command-line options for the next compilation.
TRIPLET_REGEXP is a regular expression that is used to match the
configury triplet prefix to the compiler.
The arguments are copied by GCC. ARGV need not be
NULL-terminated. The arguments must be set separately for each
compilation; that is, after a compile is requested, the
previously-set arguments cannot be reused.
/* Deprecated GCC_FE_VERSION_0 variant of the GCC_FE_VERSION_1
methods set_triplet_regexp and set_arguments. */
This returns NULL on success. On failure, returns a malloc()d
error message. The caller is responsible for freeing it. */
char *(*set_arguments) (struct gcc_base_context *self,
const char *triplet_regexp,
int argc, char **argv);
char *(*set_arguments_v0) (struct gcc_base_context *self,
const char *triplet_regexp,
int argc, char **argv);
/* Set the file name of the program to compile. The string is
copied by the method implementation, but the caller must
@ -125,6 +119,45 @@ struct gcc_base_vtable
int /* bool */ (*compile) (struct gcc_base_context *self,
const char *filename);
/* Set the compiler's command-line options for the next compilation.
The arguments are copied by GCC. ARGV need not be
NULL-terminated. The arguments must be set separately for each
compilation; that is, after a compile is requested, the
previously-set arguments cannot be reused.
This returns NULL on success. On failure, returns a malloc()d
error message. The caller is responsible for freeing it.
This method is only available since GCC_FE_VERSION_1. */
char *(*set_arguments) (struct gcc_base_context *self,
int argc, char **argv);
/* Set TRIPLET_REGEXP as a regular expression that is used to match
the configury triplet prefix to the compiler. Calling this method
overrides possible previous call of itself or set_driver_filename.
This returns NULL on success. On failure, returns a malloc()d
error message. The caller is responsible for freeing it.
This method is only available since GCC_FE_VERSION_1. */
char *(*set_triplet_regexp) (struct gcc_base_context *self,
const char *triplet_regexp);
/* DRIVER_FILENAME should be filename of the gcc compiler driver
program. It will be searched in PATH components like
TRIPLET_REGEXP. Calling this method overrides possible previous
call of itself or set_triplet_regexp.
This returns NULL on success. On failure, returns a malloc()d
error message. The caller is responsible for freeing it.
This method is only available since GCC_FE_VERSION_1. */
char *(*set_driver_filename) (struct gcc_base_context *self,
const char *driver_filename);
};
/* The GCC object. */