2010-02-12 Sriraman Tallam <tmsriram@google.com>
[deliverable/binutils-gdb.git] / include / plugin-api.h
index 45b58202eb848e099ef4fe2642b46722d21286bb..572621fc374a3605cfc2591d570360f72295fb6d 100644 (file)
@@ -1,6 +1,6 @@
 /* plugin-api.h -- External linker plugin API.  */
 
-/* Copyright 2008 Free Software Foundation, Inc.
+/* Copyright 2009 Free Software Foundation, Inc.
    Written by Cary Coutant <ccoutant@google.com>.
 
    This file is part of binutils.
 #ifndef PLUGIN_API_H
 #define PLUGIN_API_H
 
+#ifdef HAVE_STDINT_H
 #include <stdint.h>
+#elif defined(HAVE_INTTYPES_H)
+#include <inttypes.h>
+#endif
 #include <sys/types.h>
+#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && \
+    !defined(UINT64_MAX) && !defined(uint64_t)
+#error can not find uint64_t type
+#endif
 
 #ifdef __cplusplus
 extern "C"
@@ -40,6 +48,7 @@ enum ld_plugin_status
 {
   LDPS_OK = 0,
   LDPS_NO_SYMS,         /* Attempt to get symbols that haven't been added. */
+  LDPS_BAD_HANDLE,      /* No claimed object associated with given handle. */
   LDPS_ERR
   /* Additional Error codes TBD.  */
 };
@@ -110,13 +119,34 @@ enum ld_plugin_symbol_visibility
 enum ld_plugin_symbol_resolution
 {
   LDPR_UNKNOWN = 0,
+
+  /* Symbol is still undefined at this point.  */
   LDPR_UNDEF,
+
+  /* This is the prevailing definition of the symbol, with references from
+     regular object code.  */
   LDPR_PREVAILING_DEF,
+
+  /* This is the prevailing definition of the symbol, with no
+     references from regular objects.  It is only referenced from IR
+     code.  */
   LDPR_PREVAILING_DEF_IRONLY,
+
+  /* This definition was pre-empted by a definition in a regular
+     object file.  */
   LDPR_PREEMPTED_REG,
+
+  /* This definition was pre-empted by a definition in another IR file.  */
   LDPR_PREEMPTED_IR,
+
+  /* This symbol was resolved by a definition in another IR file.  */
   LDPR_RESOLVED_IR,
+
+  /* This symbol was resolved by a definition in a regular object
+     linked into the main executable.  */
   LDPR_RESOLVED_EXEC,
+
+  /* This symbol was resolved by a definition in a shared object.  */
   LDPR_RESOLVED_DYN
 };
 
@@ -165,6 +195,20 @@ enum ld_plugin_status
 (*ld_plugin_add_symbols) (void *handle, int nsyms,
                           const struct ld_plugin_symbol *syms);
 
+/* The linker's interface for getting the input file information with
+   an open (possibly re-opened) file descriptor.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_file) (const void *handle,
+                             struct ld_plugin_input_file *file);
+
+/* The linker's interface for releasing the input file.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_release_input_file) (const void *handle);
+
 /* The linker's interface for retrieving symbol resolution information.  */
 
 typedef
@@ -178,11 +222,17 @@ typedef
 enum ld_plugin_status
 (*ld_plugin_add_input_file) (char *pathname);
 
+/* The linker's interface for adding a library that should be searched.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_add_input_library) (char *libname);
+
 /* The linker's interface for issuing a warning or error message.  */
 
 typedef
 enum ld_plugin_status
-(*ld_plugin_message) (int level, char *format, ...);
+(*ld_plugin_message) (int level, const char *format, ...);
 
 enum ld_plugin_level
 {
@@ -207,7 +257,10 @@ enum ld_plugin_tag
   LDPT_ADD_SYMBOLS,
   LDPT_GET_SYMBOLS,
   LDPT_ADD_INPUT_FILE,
-  LDPT_MESSAGE
+  LDPT_MESSAGE,
+  LDPT_GET_INPUT_FILE,
+  LDPT_RELEASE_INPUT_FILE,
+  LDPT_ADD_INPUT_LIBRARY
 };
 
 /* The plugin transfer vector.  */
@@ -226,6 +279,9 @@ struct ld_plugin_tv
     ld_plugin_get_symbols tv_get_symbols;
     ld_plugin_add_input_file tv_add_input_file;
     ld_plugin_message tv_message;
+    ld_plugin_get_input_file tv_get_input_file;
+    ld_plugin_release_input_file tv_release_input_file;
+    ld_plugin_add_input_library tv_add_input_library;
   } tv_u;
 };
 
@@ -236,7 +292,7 @@ enum ld_plugin_status
 (*ld_plugin_onload) (struct ld_plugin_tv *tv);
 
 #ifdef __cplusplus
-};
+}
 #endif
 
 #endif /* !defined(PLUGIN_API_H) */
This page took 0.026191 seconds and 4 git commands to generate.