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.
This commit is contained in:
parent
1424c16eab
commit
7cf99fb1c7
|
@ -1,3 +1,10 @@
|
|||
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.
|
||||
|
||||
2015-02-27 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* minidebug.c (struct lzma_stream): Rename to ...
|
||||
|
|
|
@ -88,7 +88,7 @@ static void cp_print_value (struct type *, struct type *,
|
|||
|
||||
|
||||
/* GCC versions after 2.4.5 use this. */
|
||||
const char vtbl_ptr_name[] = "__vtbl_ptr_type";
|
||||
EXPORTED_CONST char vtbl_ptr_name[] = "__vtbl_ptr_type";
|
||||
|
||||
/* Return truth value for assertion that TYPE is of the type
|
||||
"pointer to virtual function". */
|
||||
|
|
|
@ -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,.*/,,'`
|
||||
|
|
|
@ -77,7 +77,7 @@ extern const struct extension_language_ops guile_extension_ops;
|
|||
|
||||
/* The main struct describing GDB's interface to the Guile
|
||||
extension language. */
|
||||
const struct extension_language_defn extension_language_guile =
|
||||
EXPORTED_CONST struct extension_language_defn extension_language_guile =
|
||||
{
|
||||
EXT_LANG_GUILE,
|
||||
"guile",
|
||||
|
|
Loading…
Reference in New Issue