Patchwork [10/36] Add extern "C" to declarations of C symbols

login
register
mail settings
Submitter Pedro Alves
Date Feb. 9, 2015, 11:20 p.m.
Message ID <1423524046-20605-11-git-send-email-palves@redhat.com>
Download mbox | patch
Permalink /patch/5015/
State New
Headers show

Comments

Pedro Alves - Feb. 9, 2015, 11:20 p.m.
These symbols are defined in C code, so in C++ mode we need to use
extern "C" to declare them.  As extern "C" can't be used inside a
function's scope, we move the declarations to the global scope at the
same time.

As for the linux-tdep.c change: elf-bfd.h wraps itself in extern "C"
already, while elf/common.h does not.  Since elf/common.h is already
included by "elf-bfd.h", simply remove the explicit elf/common.h
include.

gdb/ChangeLog:
2015-02-09  Pedro Alves  <palves@redhat.com>

	* cli-out.c (_rl_erase_entire_line): Move declaration out of
	cli_mld_erase_entire_line, and make it extern "C".
	* common/common-defs.h (EXTERN_C): New.
	* completer.c (_rl_completion_prefix_display_length)
	(_rl_print_completions_horizontally, QSFUNC): Move declarations
	out of gdb_display_match_list_1.
	(_rl_qsort_string_compare): Move declaration out of
	gdb_display_match_list_1, and make it extern "C".
	* defs.h (re_comp): Use EXTERN_C.
	* linux-tdep.c: Don't include elf/common.h.
	* maint.c (_mcleanup): Move declaration out of mcleanup_wrapper,
	and make it extern "C".
	(monstartup): Move declaration out of maintenance_set_profile_cmd,
	and make it extern "C".
	(main): Move declaration out of maintenance_set_profile_cmd.
	* nat/linux-ptrace.c (linux_ptrace_attach_fail_reason_string): Use
	EXTERN_C.
---
 gdb/cli-out.c            |  4 ++--
 gdb/common/common-defs.h |  6 ++++++
 gdb/completer.c          | 10 ++++++----
 gdb/defs.h               |  2 +-
 gdb/linux-tdep.c         |  1 -
 gdb/maint.c              | 10 +++++-----
 gdb/nat/linux-ptrace.c   |  2 +-
 7 files changed, 21 insertions(+), 14 deletions(-)

Patch

diff --git a/gdb/cli-out.c b/gdb/cli-out.c
index 48f2a04..2a83169 100644
--- a/gdb/cli-out.c
+++ b/gdb/cli-out.c
@@ -452,13 +452,13 @@  cli_mld_flush (const struct match_list_displayer *displayer)
   fflush (rl_outstream);
 }
 
+EXTERN_C void _rl_erase_entire_line (void);
+
 /* CLI version of displayer.erase_entire_line.  */
 
 static void
 cli_mld_erase_entire_line (const struct match_list_displayer *displayer)
 {
-  extern void _rl_erase_entire_line (void);
-
   _rl_erase_entire_line ();
 }
 
diff --git a/gdb/common/common-defs.h b/gdb/common/common-defs.h
index e80d332..3020bd8 100644
--- a/gdb/common/common-defs.h
+++ b/gdb/common/common-defs.h
@@ -50,4 +50,10 @@ 
 #include "cleanups.h"
 #include "common-exceptions.h"
 
+#ifdef __cplusplus
+# define EXTERN_C extern "C"
+#else
+# define EXTERN_C extern
+#endif
+
 #endif /* COMMON_DEFS_H */
diff --git a/gdb/completer.c b/gdb/completer.c
index bfd2788..774fb31 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -1555,6 +1555,12 @@  gdb_complete_get_screenwidth (const struct match_list_displayer *displayer)
   return displayer->width;
 }
 
+extern int _rl_completion_prefix_display_length;
+extern int _rl_print_completions_horizontally;
+
+EXTERN_C int _rl_qsort_string_compare (const void *, const void *);
+typedef int QSFUNC (const void *, const void *);
+
 /* GDB version of readline/complete.c:rl_display_match_list.
    See gdb_display_match_list for a description of MATCHES, LEN, MAX.
    Returns non-zero if all matches are displayed.  */
@@ -1567,10 +1573,6 @@  gdb_display_match_list_1 (char **matches, int len, int max,
   int i, j, k, l, common_length, sind;
   char *temp, *t;
   int page_completions = displayer->height != INT_MAX && pagination_enabled;
-  extern int _rl_completion_prefix_display_length;
-  extern int _rl_qsort_string_compare (const void *, const void *);
-  extern int _rl_print_completions_horizontally;
-  typedef int QSFUNC (const void *, const void *);
 
   /* Find the length of the prefix common to all items: length as displayed
      characters (common_length) and as a byte index into the matches (sind) */
diff --git a/gdb/defs.h b/gdb/defs.h
index a1cd45f..72512f6 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -249,7 +249,7 @@  extern int annotation_level;	/* in stack.c */
    "const char *" in unistd.h, so we can't declare the argument
    as "char *".  */
 
-extern char *re_comp (const char *);
+EXTERN_C char *re_comp (const char *);
 
 /* From symfile.c */
 
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index d9884f3..64684d0 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -26,7 +26,6 @@ 
 #include "gdbcore.h"
 #include "regcache.h"
 #include "regset.h"
-#include "elf/common.h"
 #include "elf-bfd.h"            /* for elfcore_write_* */
 #include "inferior.h"
 #include "cli/cli-utils.h"
diff --git a/gdb/maint.c b/gdb/maint.c
index be18a32..1adea2f 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -683,15 +683,18 @@  extern char etext;
 
 static int profiling_state;
 
+EXTERN_C void _mcleanup (void);
+
 static void
 mcleanup_wrapper (void)
 {
-  extern void _mcleanup (void);
-
   if (profiling_state)
     _mcleanup ();
 }
 
+EXTERN_C void monstartup (unsigned long, unsigned long);
+extern int main ();
+
 static void
 maintenance_set_profile_cmd (char *args, int from_tty,
 			     struct cmd_list_element *c)
@@ -705,9 +708,6 @@  maintenance_set_profile_cmd (char *args, int from_tty,
     {
       static int profiling_initialized;
 
-      extern void monstartup (unsigned long, unsigned long);
-      extern int main();
-
       if (!profiling_initialized)
 	{
 	  atexit (mcleanup_wrapper);
diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
index 0ce258f..e36864c 100644
--- a/gdb/nat/linux-ptrace.c
+++ b/gdb/nat/linux-ptrace.c
@@ -84,7 +84,7 @@  linux_ptrace_attach_fail_reason_string (ptid_t ptid, int err)
 #if defined __i386__ || defined __x86_64__
 
 /* Address of the 'ret' instruction in asm code block below.  */
-extern void (linux_ptrace_test_ret_to_nx_instr) (void);
+EXTERN_C void linux_ptrace_test_ret_to_nx_instr (void);
 
 #include <sys/reg.h>
 #include <sys/mman.h>