mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Generic interface between GCC and GDB
 | |
| 
 | |
|    Copyright (C) 2014-2015 Free Software Foundation, Inc.
 | |
| 
 | |
|    This file is part of GCC.
 | |
| 
 | |
|    This program is free software; you can redistribute it and/or modify
 | |
|    it under the terms of the GNU General Public License as published by
 | |
|    the Free Software Foundation; either version 3 of the License, or
 | |
|    (at your option) any later version.
 | |
| 
 | |
|    This program is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|    GNU General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU General Public License
 | |
|    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| #ifndef GCC_INTERFACE_H
 | |
| #define GCC_INTERFACE_H
 | |
| 
 | |
| /* This header defines the interface to the GCC API.  It must be both
 | |
|    valid C and valid C++, because it is included by both programs.  */
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* Opaque typedefs for objects passed through the interface.  */
 | |
| 
 | |
| typedef unsigned long long gcc_type;
 | |
| typedef unsigned long long gcc_decl;
 | |
| 
 | |
| /* An address in the inferior.  */
 | |
| 
 | |
| typedef unsigned long long gcc_address;
 | |
| 
 | |
| /* Forward declaration.  */
 | |
| 
 | |
| struct gcc_base_context;
 | |
| 
 | |
| /* Defined versions of the generic API.  */
 | |
| 
 | |
| enum gcc_base_api_version
 | |
| {
 | |
|   GCC_FE_VERSION_0 = 0
 | |
| };
 | |
| 
 | |
| /* The operations defined by the GCC base API.  This is the vtable for
 | |
|    the real context structure which is passed around.
 | |
| 
 | |
|    The "base" API is concerned with basics shared by all compiler
 | |
|    front ends: setting command-line arguments, the file names, etc.
 | |
| 
 | |
|    Front-end-specific interfaces inherit from this one.  */
 | |
| 
 | |
| struct gcc_base_vtable
 | |
| {
 | |
|   /* The actual version implemented in this interface.  This field can
 | |
|      be relied on not to move, so users can always check it if they
 | |
|      desire.  The value is one of the gcc_base_api_version constants.
 | |
|   */
 | |
| 
 | |
|   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.
 | |
| 
 | |
|      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);
 | |
| 
 | |
|   /* Set the file name of the program to compile.  The string is
 | |
|      copied by the method implementation, but the caller must
 | |
|      guarantee that the file exists through the compilation.  */
 | |
| 
 | |
|   void (*set_source_file) (struct gcc_base_context *self, const char *file);
 | |
| 
 | |
|   /* Set a callback to use for printing error messages.  DATUM is
 | |
|      passed through to the callback unchanged.  */
 | |
| 
 | |
|   void (*set_print_callback) (struct gcc_base_context *self,
 | |
| 			      void (*print_function) (void *datum,
 | |
| 						      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.  */
 | |
| 
 | |
|   int /* bool */ (*compile) (struct gcc_base_context *self,
 | |
| 			     const char *filename,
 | |
| 			     int /* bool */ verbose);
 | |
| 
 | |
|   /* Destroy this object.  */
 | |
| 
 | |
|   void (*destroy) (struct gcc_base_context *self);
 | |
| };
 | |
| 
 | |
| /* The GCC object.  */
 | |
| 
 | |
| struct gcc_base_context
 | |
| {
 | |
|   /* The virtual table.  */
 | |
| 
 | |
|   const struct gcc_base_vtable *ops;
 | |
| };
 | |
| 
 | |
| /* The name of the dummy wrapper function generated by gdb.  */
 | |
| 
 | |
| #define GCC_FE_WRAPPER_FUNCTION "_gdb_expr"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* GCC_INTERFACE_H */
 |