aboutsummaryrefslogtreecommitdiff
path: root/gdb/features
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2015-02-09 13:22:27 +0000
committerPedro Alves <palves@redhat.com>2015-02-27 17:31:45 +0000
commit7cf99fb1c72769c17eed0a62951698bf56432108 (patch)
treed5a1add0bce7cbe9b49fe34a4f88a1ba17f2010b /gdb/features
parent1424c16eab1a96de054991c346c2bbf3eac82dec (diff)
downloadgdb-7cf99fb1c72769c17eed0a62951698bf56432108.zip
gdb-7cf99fb1c72769c17eed0a62951698bf56432108.tar.gz
gdb-7cf99fb1c72769c17eed0a62951698bf56432108.tar.bz2
Exported const objects
const works different in C vs C++. In C++, a global "const" variable has internal linkage by default, resulting in link errors like: ... extension.o: In function `get_ext_lang_defn(extension_language)': gdb/extension.c:126: undefined reference to `extension_language_guile' gdb/extension.c:124: undefined reference to `extension_language_guile' ... The fix is to define exported const objects with "extern const". But that in C would not be a definition. So we need to #ifdef C vs C++ in this case. EXPORTED_CONST comes from include/ansidecl.h, but in the feature_to_c.sh case I think it's better to leave the script with no dependencies. gdb/ChangeLog: 2015-02-27 Pedro Alves <palves@redhat.com> * cp-valprint.c (vtbl_ptr_name): Use EXPORTED_CONST. * guile/guile.c (extension_language_guile): Use EXPORTED_CONST. * features/feature_to_c.sh: Tag the generated xml_builtin array with extern const in C++ mode.
Diffstat (limited to 'gdb/features')
-rw-r--r--gdb/features/feature_to_c.sh8
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/features/feature_to_c.sh b/gdb/features/feature_to_c.sh
index fb37a6b..35db791 100644
--- a/gdb/features/feature_to_c.sh
+++ b/gdb/features/feature_to_c.sh
@@ -63,7 +63,13 @@ for input; do
done
echo >> $output
-echo "const char *const xml_builtin[][2] = {" >> $output
+
+echo "#ifdef __cplusplus" >> $output
+echo "# define EXPORTED_CONST extern const" >> $output
+echo "#else" >> $output
+echo "# define EXPORTED_CONST const" >> $output
+echo "#endif" >> $output
+echo "EXPORTED_CONST char *const xml_builtin[][2] = {" >> $output
for input; do
basename=`echo $input | sed 's,.*/,,'`