This is the mail archive of the gdb-patches@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]

[PATCH 00/36] Support building GDB as a C++ program


I'm glad to announce that the global maintainers have reached
consensus on converting GDB to use C++ as implementation language.

See the project page here: https://sourceware.org/gdb/wiki/cxx-conversion

This series implements the first parts of the transition plan
described in that page.  Namely:

  - Add a --enable-build-with-cxx option (default: no) to compile GDB
    and GDBserver with a C++ compiler, keeping the support for
    building with a C compiler.

  - Modify GDB and GDBserver so they can be compiled in C++ mode,
    using G++'s '-fpermissive' option as shortcut.

  - Split the TRY_CATCH macro into TRY/CATCH macros to better map to
    C++'s 'throw'/'try...catch' in C++ mode, and eliminate all the
    volatile gdb_exception objects.

Some of the patches in the series are generated with scripts.

You'll find those here:
  git@github.com:palves/gdb-refactoring-scripts.git master
Web browsable here:
  https://github.com/palves/gdb-refactoring-scripts

I have regtested/built this on x86_64 Fedora 20 (only).

Known problems:

. Other hosts/native targets will naturally stumble on more
  host-specific code that needs converting, which I can't easily test.
  Help very much welcome!

. '--enable-targets=all' doesn't link yet in C++ mode.  This just more
  extern "C" problems.

These are the kinds of things that we can fix incrementally in
mainline.

Tested on x86_64 Fedora 20, native and gdbserver, both C and C++
modes.

For convenience, you can also find this series here:
  git@github.com:palves/gdb.git palves/cxx-conversion-attempt
Web version:
  https://github.com/palves/gdb/commits/palves/cxx-conversion-attempt
  
I wrote a second series a few months ago that built on an older
version of this one and fixes all the '-fpermissive' errors/warnings,
until GDB and GDBserver build cleanly with -Werror, on x86_64 Fedora.
It's naturally rotten in a few places by now, and in need of some
further cleaning up but it shouldn't be that far off.  You can find it
here:

  https://github.com/palves/gdb/commits/palves/cxx-conversion-attempt-part-2-no-fpermissive
  git@github.com:palves/gdb.git palves/cxx-conversion-attempt-part-2-no-fpermissive

Pedro Alves (31):
  Create libiberty/libiberty.m4
  Add --enable-build-with-cxx configure switch
  C++ keyword cleanliness, mostly auto-generated
  record-btrace.c: Remove redefinitions
  Make array object extern
  elf-bfd.h: Wrap in extern "C".
  floatformat.h: Wrap in extern "C".
  Add extern "C" to declarations of C symbols
  Make functions and variables exported by the IPA be extern "C"
  proc-service, extern "C"
  target.h: Include infrun.h
  Don't forward declare enum target_hw_bp_type
  x86 Linux/ptrace: fix offsetof usage in C++ mode
  mi/mi-cmd-stack.c|frame filters: print_values <-> ext_lang_frame_args
  Exported const objects
  gdbserver/tracepoint: Add cast sockaddr_un/sockaddr cast
  opcodes/microblaze: Rename 'or', 'and', 'xor' to avoid C++ conflict
  Remove duplicate const
  gdbarch.h: include regcache.h
  breakpoint.h: move enum âprint_stop_actionâ
  python/python-internal.h: enum âext_lang_rcâ not defined
  Adjust self tests to cope with GDB built as a C++ program
  catch_command_errors: Remove 'mask' parameter
  Move exception_none to common code, and use it
  Normalize TRY_CATCH exception handling block
  Split TRY_CATCH into TRY + CATCH
  TRY_CATCH -> TRY+CATCH+END_CATCH everywhere
  TRY_CATCH -> TRY+CATCH+END_CATCH, the manual conversions
  more making TRY/CATCH callers look more like real C++ try/catch blocks
  kill volatile struct gdb_exception
  Make TRY/CATCH use real C++ try/catch in C++ mode

Tom Tromey (5):
  Fix struct, union, and enum nesting in C++
  Fix redefinition errors in C++ mode
  Do not do arithmetic on enum types
  Rename struct lzma_stream to avoid clash with system header
  quit_force: Replace TRY_CATCH wrapper macros

 bfd/elf-bfd.h                               |   7 +
 gdb/Makefile.in                             |  17 +-
 gdb/acinclude.m4                            |   6 +
 gdb/ada-lang.c                              |  94 ++--
 gdb/ada-lang.h                              |   2 +-
 gdb/ada-typeprint.c                         |  11 +-
 gdb/ada-valprint.c                          |   7 +-
 gdb/addrmap.c                               |  56 +--
 gdb/aix-thread.c                            |  32 +-
 gdb/amd64-tdep.c                            | 109 +++--
 gdb/arm-tdep.c                              |   8 +-
 gdb/bcache.c                                |  14 +-
 gdb/block.c                                 |  10 +-
 gdb/block.h                                 |   6 +-
 gdb/break-catch-throw.c                     |  51 +-
 gdb/breakpoint.c                            | 123 ++---
 gdb/breakpoint.h                            |  40 +-
 gdb/btrace.c                                |  18 +-
 gdb/build-with-cxx.m4                       |  40 ++
 gdb/buildsym.c                              |  18 +-
 gdb/c-exp.y                                 |  42 +-
 gdb/c-varobj.c                              |  38 +-
 gdb/cli-out.c                               |   4 +-
 gdb/cli/cli-decode.c                        | 110 ++---
 gdb/cli/cli-decode.h                        |   2 +-
 gdb/cli/cli-interp.c                        |   9 +-
 gdb/cli/cli-script.c                        |  27 +-
 gdb/cli/cli-setshow.c                       |  20 +-
 gdb/coffread.c                              |  38 +-
 gdb/command.h                               |  24 +-
 gdb/common/agent.h                          |   3 +-
 gdb/common/cleanups.c                       |  12 +-
 gdb/common/common-defs.h                    |  10 +
 gdb/common/common-exceptions.c              | 143 ++++--
 gdb/common/common-exceptions.h              | 102 +++-
 gdb/common/filestuff.c                      |  10 +-
 gdb/common/filestuff.h                      |   4 +-
 gdb/compile/compile-c-symbols.c             |  47 +-
 gdb/compile/compile-object-run.c            |  19 +-
 gdb/completer.c                             |  25 +-
 gdb/config.in                               |  45 ++
 gdb/configure                               | 640 ++++++++++++++++++++++---
 gdb/configure.ac                            |  36 +-
 gdb/continuations.c                         |  12 +-
 gdb/corelow.c                               |  19 +-
 gdb/cp-abi.c                                |  33 +-
 gdb/cp-name-parser.y                        |  20 +-
 gdb/cp-namespace.c                          |  63 +--
 gdb/cp-support.c                            |  82 ++--
 gdb/cp-support.h                            |   2 +-
 gdb/cp-valprint.c                           |  43 +-
 gdb/d-exp.y                                 |   8 +-
 gdb/darwin-nat-info.c                       |  22 +-
 gdb/darwin-nat.c                            | 124 ++---
 gdb/dbxread.c                               |  41 +-
 gdb/defs.h                                  |   2 +-
 gdb/dwarf2-frame-tailcall.c                 |   6 +-
 gdb/dwarf2-frame.c                          |  56 ++-
 gdb/dwarf2loc.c                             |  17 +-
 gdb/dwarf2read.c                            | 162 ++++---
 gdb/elfread.c                               |   8 +-
 gdb/environ.c                               |   6 +-
 gdb/eval.c                                  |  33 +-
 gdb/event-loop.c                            |   7 +-
 gdb/event-top.c                             |  12 +-
 gdb/exceptions.c                            |  20 +-
 gdb/exceptions.h                            |   3 -
 gdb/f-exp.y                                 |  16 +-
 gdb/f-valprint.c                            |  11 +-
 gdb/features/feature_to_c.sh                |   8 +-
 gdb/frame-unwind.c                          |  27 +-
 gdb/frame.c                                 |  47 +-
 gdb/gcore.c                                 |  13 +-
 gdb/gdb_proc_service.h                      |  11 +
 gdb/gdbarch.c                               |  22 +-
 gdb/gdbarch.h                               |   2 +
 gdb/gdbarch.sh                              |  24 +-
 gdb/gdbserver/Makefile.in                   |  16 +-
 gdb/gdbserver/acinclude.m4                  |   6 +
 gdb/gdbserver/config.in                     |  41 ++
 gdb/gdbserver/configure                     | 708 +++++++++++++++++++++++++++-
 gdb/gdbserver/configure.ac                  |  34 +-
 gdb/gdbserver/gdb_proc_service.h            |  79 ++++
 gdb/gdbserver/inferiors.h                   |   2 +-
 gdb/gdbserver/linux-aarch64-low.c           |   4 +-
 gdb/gdbserver/linux-amd64-ipa.c             |   2 +-
 gdb/gdbserver/linux-arm-low.c               |  10 +-
 gdb/gdbserver/linux-i386-ipa.c              |   2 +-
 gdb/gdbserver/linux-low.c                   |  20 +-
 gdb/gdbserver/linux-mips-low.c              |  58 +--
 gdb/gdbserver/linux-x86-low.c               |  28 +-
 gdb/gdbserver/lynx-low.c                    |  12 +-
 gdb/gdbserver/proc-service.c                |   4 +-
 gdb/gdbserver/server.c                      |  38 +-
 gdb/gdbserver/thread-db.c                   |  42 +-
 gdb/gdbserver/tracepoint.c                  | 188 ++++----
 gdb/gdbserver/tracepoint.h                  |  50 +-
 gdb/gdbthread.h                             |   2 +-
 gdb/gdbtypes.c                              |  62 +--
 gdb/gdbtypes.h                              | 573 +++++++++++-----------
 gdb/gnu-v3-abi.c                            |  44 +-
 gdb/go-exp.y                                |   8 +-
 gdb/guile/guile-internal.h                  |   6 +-
 gdb/guile/guile.c                           |  20 +-
 gdb/guile/scm-block.c                       |   9 +-
 gdb/guile/scm-breakpoint.c                  |  79 +++-
 gdb/guile/scm-cmd.c                         |   9 +-
 gdb/guile/scm-disasm.c                      |   9 +-
 gdb/guile/scm-frame.c                       | 169 ++++---
 gdb/guile/scm-lazy-string.c                 |  15 +-
 gdb/guile/scm-math.c                        |  38 +-
 gdb/guile/scm-param.c                       |  19 +-
 gdb/guile/scm-ports.c                       |   9 +-
 gdb/guile/scm-pretty-print.c                |   7 +-
 gdb/guile/scm-symbol.c                      |  68 ++-
 gdb/guile/scm-symtab.c                      |   9 +-
 gdb/guile/scm-type.c                        | 105 +++--
 gdb/guile/scm-utils.c                       |  12 +-
 gdb/guile/scm-value.c                       | 244 +++++++---
 gdb/hppa-linux-tdep.c                       |  14 +-
 gdb/i386-tdep.c                             |  36 +-
 gdb/ia64-tdep.c                             |  30 +-
 gdb/inf-loop.c                              |  15 +-
 gdb/inf-ttrace.c                            |  32 +-
 gdb/infcall.c                               |  13 +-
 gdb/infcmd.c                                |  21 +-
 gdb/inferior.c                              |   2 +-
 gdb/inferior.h                              |   2 +-
 gdb/infrun.c                                |  23 +-
 gdb/jit.c                                   |  32 +-
 gdb/jv-exp.y                                |  24 +-
 gdb/linespec.c                              |  21 +-
 gdb/linux-nat.c                             |   6 +-
 gdb/linux-tdep.c                            |  12 +-
 gdb/linux-thread-db.c                       |  73 +--
 gdb/m32c-tdep.c                             |  35 +-
 gdb/macrotab.c                              |  14 +-
 gdb/main.c                                  | 101 ++--
 gdb/maint.c                                 |  10 +-
 gdb/mdebugread.c                            |  54 +--
 gdb/memattr.c                               |  24 +-
 gdb/mi/mi-cmd-stack.c                       |  48 +-
 gdb/mi/mi-cmd-var.c                         |  14 +-
 gdb/mi/mi-interp.c                          |  24 +-
 gdb/mi/mi-main.c                            |  15 +-
 gdb/minidebug.c                             |  22 +-
 gdb/minsyms.c                               |  20 +-
 gdb/nat/linux-ptrace.c                      |   2 +-
 gdb/nat/x86-dregs.c                         |   4 +-
 gdb/nat/x86-dregs.h                         |   3 +-
 gdb/nto-procfs.c                            |  16 +-
 gdb/nto-tdep.c                              |   6 +-
 gdb/objc-lang.c                             |  68 +--
 gdb/p-exp.y                                 |  10 +-
 gdb/p-valprint.c                            |  24 +-
 gdb/parse.c                                 |  27 +-
 gdb/parser-defs.h                           |   2 +-
 gdb/ppc-linux-tdep.c                        |  10 +-
 gdb/ppcnbsd-tdep.c                          |   4 +-
 gdb/printcmd.c                              |  64 +--
 gdb/prologue-value.h                        |  41 +-
 gdb/psymtab.c                               |  22 +-
 gdb/python/py-arch.c                        |  10 +-
 gdb/python/py-block.c                       |  13 +-
 gdb/python/py-bpevent.c                     |   5 +-
 gdb/python/py-breakpoint.c                  |  60 ++-
 gdb/python/py-cmd.c                         |  11 +-
 gdb/python/py-continueevent.c               |   5 +-
 gdb/python/py-event.h                       |   5 +-
 gdb/python/py-evtregistry.c                 |   4 +-
 gdb/python/py-exitedevent.c                 |   5 +-
 gdb/python/py-finishbreakpoint.c            |  51 +-
 gdb/python/py-frame.c                       | 162 ++++---
 gdb/python/py-framefilter.c                 | 134 +++---
 gdb/python/py-function.c                    |   4 +-
 gdb/python/py-gdb-readline.c                |  19 +-
 gdb/python/py-inferior.c                    |  47 +-
 gdb/python/py-infevents.c                   |  20 +-
 gdb/python/py-infthread.c                   |  13 +-
 gdb/python/py-lazy-string.c                 |  13 +-
 gdb/python/py-linetable.c                   |  21 +-
 gdb/python/py-newobjfileevent.c             |  10 +-
 gdb/python/py-objfile.c                     |  22 +-
 gdb/python/py-param.c                       |  11 +-
 gdb/python/py-prettyprint.c                 |  16 +-
 gdb/python/py-progspace.c                   |   4 +-
 gdb/python/py-signalevent.c                 |   5 +-
 gdb/python/py-stopevent.c                   |   3 +-
 gdb/python/py-symbol.c                      |  67 ++-
 gdb/python/py-symtab.c                      |   8 +-
 gdb/python/py-threadevent.c                 |   3 +-
 gdb/python/py-type.c                        | 164 ++++---
 gdb/python/py-utils.c                       |   9 +-
 gdb/python/py-value.c                       | 228 ++++++---
 gdb/python/python-internal.h                |   1 +
 gdb/python/python.c                         |  89 ++--
 gdb/record-btrace.c                         | 100 ++--
 gdb/remote-mips.c                           |   4 +-
 gdb/remote.c                                |  97 ++--
 gdb/rs6000-aix-tdep.c                       |   7 +-
 gdb/rs6000-tdep.c                           |  13 +-
 gdb/s390-linux-tdep.c                       |  19 +-
 gdb/solib-darwin.c                          |  20 +-
 gdb/solib-dsbt.c                            |   8 +-
 gdb/solib-frv.c                             |   8 +-
 gdb/solib-ia64-hpux.c                       |  26 +-
 gdb/solib-pa64.c                            |  28 +-
 gdb/solib-som.c                             |  58 +--
 gdb/solib-spu.c                             |  30 +-
 gdb/solib-svr4.c                            | 104 ++--
 gdb/solib.c                                 |  58 ++-
 gdb/sparc-sol2-tdep.c                       |   2 +-
 gdb/stabsread.c                             | 100 ++--
 gdb/stack.c                                 | 135 +++---
 gdb/stap-probe.c                            |   4 +-
 gdb/symfile-debug.c                         |   6 +-
 gdb/symfile.h                               |  20 +-
 gdb/symtab.c                                | 118 ++---
 gdb/target-descriptions.c                   |  54 ++-
 gdb/target.c                                |   6 +-
 gdb/target.h                                |   2 +
 gdb/testsuite/gdb.gdb/complaints.exp        |   6 +-
 gdb/testsuite/gdb.gdb/python-interrupts.exp |   2 +-
 gdb/testsuite/gdb.gdb/python-selftest.exp   |   2 +-
 gdb/testsuite/gdb.gdb/selftest.exp          |   6 +-
 gdb/thread.c                                |  10 +-
 gdb/top.c                                   |  43 +-
 gdb/tracefile-tfile.c                       |   6 +-
 gdb/tui/tui-data.c                          |   4 +-
 gdb/tui/tui-data.h                          |   8 +-
 gdb/tui/tui-layout.c                        |   8 +-
 gdb/tui/tui-win.c                           |   8 +-
 gdb/tui/tui-windata.c                       |   2 +-
 gdb/tui/tui-wingeneral.c                    |   2 +-
 gdb/tui/tui.c                               |   6 +-
 gdb/typeprint.c                             |  24 +-
 gdb/ui-file.h                               |   2 +-
 gdb/valarith.c                              |   6 +-
 gdb/valops.c                                |  13 +-
 gdb/valprint.c                              |  10 +-
 gdb/value.c                                 | 140 +++---
 gdb/varobj.c                                |  99 ++--
 gdb/varobj.h                                |   4 +-
 gdb/x86-linux-nat.c                         |  17 +-
 gdb/xcoffread.c                             |  30 +-
 gdb/xml-support.c                           |  12 +-
 gdb/xtensa-tdep.h                           |  14 +-
 include/floatformat.h                       |   8 +
 libiberty/libiberty.m4                      |  33 ++
 opcodes/microblaze-opc.h                    |   6 +-
 opcodes/microblaze-opcm.h                   |   4 +-
 251 files changed, 6281 insertions(+), 3484 deletions(-)
 create mode 100644 gdb/build-with-cxx.m4
 mode change 100644 => 100755 gdb/features/feature_to_c.sh
 create mode 100644 libiberty/libiberty.m4

-- 
1.9.3


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