diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2016-10-25 15:19:46 +0200 |
---|---|---|
committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2016-10-25 15:19:46 +0200 |
commit | b196bc4cb45969ade48efcba6c31b1de0acf24d0 (patch) | |
tree | e6b378d6af3133a6a5b403e8e398348f16ecaeec /gdb/ChangeLog | |
parent | b30f354acb39f63bf3213673a0584119e63538b9 (diff) | |
download | fsf-binutils-gdb-b196bc4cb45969ade48efcba6c31b1de0acf24d0.zip fsf-binutils-gdb-b196bc4cb45969ade48efcba6c31b1de0acf24d0.tar.gz fsf-binutils-gdb-b196bc4cb45969ade48efcba6c31b1de0acf24d0.tar.bz2 |
Fix gdb C++ compilation on Solaris (PR build/20712)
gdb 7.12 doesn't compile as C++ (tried with g++ 4.9) on Solaris (tried
10 and 12, sparc and x86). The following patch (relative to the 7.12
release, though I expect most if not all issues to be present on trunk,
too) fixes this.
Only a few of the changes bear explanation:
* Initially, compilation failed whereever defs.h. was included:
In file included from /vol/src/gnu/gdb/gdb-7.12/gdb/gdb.c:19:0:
/vol/src/gnu/gdb/gdb-7.12/gdb/defs.h:630:33: error: 'double atof(const char*)' conflicts with a previous declaration
extern double atof (const char *); /* X3.159-1989 4.10.1.1 */
^
In file included from /usr/include/stdlib.h:17:0,
from build-gnulib/import/stdlib.h:36,
from /vol/src/gnu/gdb/gdb-7.12/gdb/common/common-defs.h:32,
from /vol/src/gnu/gdb/gdb-7.12/gdb/defs.h:28,
from /vol/src/gnu/gdb/gdb-7.12/gdb/gdb.c:19:
/vol/gcc-4.9/lib/gcc/i386-pc-solaris2.10/4.9.0/include-fixed/iso/stdlib_iso.h:119:15: note: previous declaration 'double std::atof(const char*)'
extern double atof(const char *);
^
This is due to this gem in gdb/defs.h which seems to have been present
like forever:
#ifndef atof
extern double atof (const char *); /* X3.159-1989 4.10.1.1 */
#endif
In the Solaris headers, the appropriate functions are in namespace std,
thus the conflict. I've wrapped the defs.h declaration in !__cplusplus
to avoid this; perhaps it can go completely instead.
* All the casts are necessary to appease g++ and should be pretty
obvious.
* The sol-thread.c changes are here to handle
/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c: In function 'void _initialize_sol_thread()':
/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c:1252:36: error: invalid conversion from 'void*' to 'void (*)(int)' [-fpermissive]
if (!(p_##X = dlsym (dlhandle, #X))) \
^
/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c:1255:3: note: in expansion of macro 'resolve'
resolve (td_log);
^
and are modeled after linux-thread-db.c (try_thread_db_load_1).
The patch allowed both 32 and 64-bit C++ builds on sparc-sun-solaris2.10
and i386-pc-solaris2.10 to complete. The resulting binary hasn't seen
more than a smoke test (invoke it on itself, b main, run) yet.
When investigating the failure to detect -static-libstdc++
support (more below), I found two more issues which only show up with
-Werror:
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In function 'ssd* proc_get_LDT_entry(procinfo*, int)':
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c:2487:19: error: variable 'old_chain' set but not used [-Werror=unused-but-set-variable]
struct cleanup *old_chain = NULL;
^
Unless I'm mistaken, you need to run do_cleanups on every return from
the function.
Afterwards, I ran a 32-bit compilation, which (after adding
--disable-largefile to avoid
In file included from /usr/include/sys/procfs.h:28:0,
from /vol/src/gnu/gdb/gdb/local/gdb/i386-sol2-nat.c:23:
/usr/include/sys/old_procfs.h:39:2: error: #error "Cannot use procfs in the large file compilation environment"
#error "Cannot use procfs in the large file compilation environment"
^
and two more instances) revealed
/vol/src/gnu/gdb/gdb/local/gdb/top.c: In function 'void gdb_safe_append_history()':
/vol/src/gnu/gdb/gdb/local/gdb/top.c:1170:59: error: format '%d' expects argument of type 'int', but argument 3 has type 'pid_t {aka long int}' [-Werror=format=]
= xstrprintf ("%s-gdb%d~", history_filename, getpid ());
^
Fixed by casting pid_t to long and printing it as such.
Diffstat (limited to 'gdb/ChangeLog')
-rw-r--r-- | gdb/ChangeLog | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1f58821..10d6866 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,38 @@ +2016-10-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR build/20712 + * defs.h: Remove obsolete comment + (atof): Remove. + * procfs.c (do_destroy_procinfo_cleanup): Add cast. + (sysset_t_alloc): Likewise. + (proc_set_traced_sysentry): Likewise. + (proc_set_traced_sysexit): Likewise. + [!PIOCLSTATUS && NEW_PROC_API] (do_closedir_cleanup): Likewise. + (proc_get_LDT_entry): Initiate cleanups before returns. + (procfs_wait): Use GDB_SIGNAL_0. + (procfs_corefile_thread_callback): Add cast. + * sol-thread.c (td_log_ftype, td_ta_new_ftype, td_ta_delete_ftype) + (td_init_ftype, td_ta_get_ph_ftype, td_ta_get_nthreads_ftype) + (td_ta_tsd_iter_ftype, td_ta_thr_iter_ftype) + (td_thr_validate_ftype, td_thr_tsd_ftype, td_thr_get_info_ftype) + (td_thr_getfpregs_ftype, td_thr_getxregsize_ftype) + (td_thr_getxregs_ftype, td_thr_sigsetmask_ftype) + (td_thr_setprio_ftype, td_thr_setsigpending_ftype) + (td_thr_setfpregs_ftype, td_thr_setxregs_ftype) + (td_ta_map_id2thr_ftype, td_ta_map_lwp2thr_ftype) + (td_thr_getgregs_ftype, td_thr_setgregs_ftype): New typedefs. + (p_td_log, p_td_ta_new, p_td_ta_delete, p_td_init, p_td_ta_get_ph) + (p_td_ta_get_nthreads, p_td_ta_tsd_iter, p_td_ta_thr_iter) + (p_td_thr_validate, p_td_thr_tsd, p_td_thr_get_info) + (p_td_thr_getfpregs, p_td_thr_getxregsize, p_td_thr_getxregs) + (p_td_thr_sigsetmask, p_td_thr_setprio, p_td_thr_setsigpending) + (p_td_thr_setfpregs, p_td_thr_setxregs, p_td_ta_map_id2thr) + (p_td_ta_map_lwp2thr, p_td_thr_getgregs, p_td_thr_setgregs): Use them. + (ps_pdread): Add cast. + (ps_ptread): Likewise. + (resolve): Likewise. + * top.c (gdb_safe_append_history): Print pid_t as long. + 2016-10-25 Pedro Alves <palves@redhat.com> * common/common-defs.h (__STDC_FORMAT_MACROS): Define. |