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 c++/19436] C++11 ABI tag does not work


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

--- Comment #5 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pedro Alves <palves@sourceware.org>:

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

commit bd69330db86b2367aac8aac5915f1686451c9d5d
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Nov 29 19:33:24 2017 +0000

    Breakpoints in symbols with ABI tags (PR c++/19436)

    Trying to set a breakpoint in a function with an ABI tag does not work
    currently.  E.g., debugging gdb itself, we see this with the
    "string_printf" function:

     (top-gdb) b string_print                               [TAB]
     (top-gdb) b string_printf[abi:cxx11](char const*, ...) [RET]
     No source file named string_printf[abi.
     Make breakpoint pending on future shared library load? (y or [n])

    Quoting doesn't help:
     (top-gdb) b 'string_printf[abi:cxx11]'(char const*, ...)
     malformed linespec error: unexpected string, "(char const*, ...)"
     (top-gdb) b 'string_printf[abi:cxx11](char const*, ...)'
     No source file named string_printf[abi.
     Make breakpoint pending on future shared library load? (y or [n]) n

    This patch fixes this, and takes it a bit further.

    The actual symbol name as demangled by libiberty's demangler is really

     string_printf[abi:cxx11](char const*, ...)

    however, this patch makes it possible to set the breakpoint with

     string_printf(char const*, ...)

    too.  I.e., ignoring the ABI tag.

    And to match, it teaches the completer to complete the symbol name
    without the ABI tag, i.e.,

      "string_pri<TAB>"  -> "string_printf(char const*, ...)"

    If however, you really want to break on a symbol with the tag, then
    you simply start writing the tag, and GDB will preserve it, like:

      "string_printf[a<TAB>"  -> "string_printf[abi:cxx11](char const*, ...)"

    Grows the gdb.linespec/ tests like this:

      -# of expected passes           8977
      +# of expected passes           9176

    gdb/ChangeLog:
    2017-11-29  Pedro Alves  <palves@redhat.com>

        PR c++/19436
        * NEWS: Mention setting breakpoints on functions with C++ ABI
        tags.
        * completer.h (completion_match_for_lcd) <match,
        mark_ignored_range>: New methods.
        <finish>: Consider ignored ranges.
        <clear>: Clear ignored ranges.
        <m_ignored_ranges, m_finished_storage>: New fields.
        * cp-support.c (cp_search_name_hash): Ignore ABI tags.
        (cp_symbol_name_matches_1, cp_fq_symbol_name_matches): Pass the
        completion_match_for_lcd pointer to strncmp_iw_with_mode.
        (test_cp_symbol_name_cmp): Add [abi:...] tags unit tests.
        * language.c (default_symbol_name_matcher): Pass the
        completion_match_for_lcd pointer to strncmp_iw_with_mode.
        * linespec.c (linespec_lexer_lex_string): Don't tokenize ABI tags.
        * utils.c (skip_abi_tag): New function.
        (strncmp_iw_with_mode): Add completion_match_for_lcd parameter.
        Handle ABI tags.
        * utils.h (strncmp_iw_with_mode): Add completion_match_for_lcd
        parameter.

    gdb/testsuite/ChangeLog:
    2017-11-29  Pedro Alves  <palves@redhat.com>

        PR c++/19436
        * gdb.linespec/cpls-abi-tag.cc: New file.
        * gdb.linespec/cpls-abi-tag.exp: New file.

    gdb/doc/ChangeLog:
    2017-11-29  Pedro Alves  <palves@redhat.com>

        PR c++/19436
        * gdb.texinfo (Debugging C Plus Plus): Document setting
        breakpoints in functions with ABI tags.

-- 
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]