This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug build/20712] gdb 7.12+ doesn't build as C++ on Solaris


https://sourceware.org/bugzilla/show_bug.cgi?id=20712

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Rainer Orth <ro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b196bc4cb45969ade48efcba6c31b1de0acf24d0

commit b196bc4cb45969ade48efcba6c31b1de0acf24d0
Author: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Date:   Tue Oct 25 15:19:46 2016 +0200

    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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]