Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_gdb fails in debug build with -mcet -fcf-protection -O0 #77143

Closed
irushchyshyn mannequin opened this issue Feb 27, 2018 · 29 comments
Closed

test_gdb fails in debug build with -mcet -fcf-protection -O0 #77143

irushchyshyn mannequin opened this issue Feb 27, 2018 · 29 comments
Labels
3.7 (EOL) end of life 3.8 (EOL) end of life tests Tests in the Lib/test dir

Comments

@irushchyshyn
Copy link
Mannequin

irushchyshyn mannequin commented Feb 27, 2018

BPO 32962
Nosy @vstinner, @serhiy-storchaka, @stratakis, @irushchyshyn, @Dormouse759, @pablogsal, @miss-islington
PRs
  • bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 #6754
  • bpo-32962: python-gdb catchs ValueError on read_var() #7692
  • bpo-32962: python-gdb catchs UnicodeDecodeError #7693
  • [3.7] bpo-32962: Backport python-gdb.py and test_gdb.py from master #7710
  • [3.6] bpo-32962: Backport python-gdb.py and test_gdb.py from master (GH-7710) #7711
  • Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" #7723
  • [3.7] Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" #7724
  • [3.6] Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" #7725
  • [2.7] bpo-32962: Backport python-gdb.py and test_gdb.py from master (GH-7710) #7726
  • bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 #9656
  • [3.7] bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656) #9770
  • [3.6] bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656) #9771
  • [2.7] bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656) #9788
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2018-10-10.10:55:19.914>
    created_at = <Date 2018-02-27.09:02:47.068>
    labels = ['3.8', '3.7', 'tests']
    title = 'test_gdb fails in debug build with `-mcet -fcf-protection -O0`'
    updated_at = <Date 2018-10-10.10:55:19.911>
    user = 'https://github.com/irushchyshyn'

    bugs.python.org fields:

    activity = <Date 2018-10-10.10:55:19.911>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2018-10-10.10:55:19.914>
    closer = 'vstinner'
    components = ['Tests']
    creation = <Date 2018-02-27.09:02:47.068>
    creator = 'ishcherb'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 32962
    keywords = ['patch']
    message_count = 29.0
    messages = ['312985', '317851', '319518', '319538', '319546', '319547', '319549', '319624', '319626', '319630', '319669', '319671', '319672', '319674', '319675', '319679', '319888', '319909', '319918', '319920', '319929', '319930', '327406', '327411', '327414', '327417', '327418', '327465', '327466']
    nosy_count = 7.0
    nosy_names = ['vstinner', 'serhiy.storchaka', 'cstratak', 'ishcherb', 'Dormouse759', 'pablogsal', 'miss-islington']
    pr_nums = ['6754', '7692', '7693', '7710', '7711', '7723', '7724', '7725', '7726', '9656', '9770', '9771', '9788']
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue32962'
    versions = ['Python 2.7', 'Python 3.6', 'Python 3.7', 'Python 3.8']

    @irushchyshyn
    Copy link
    Mannequin Author

    irushchyshyn mannequin commented Feb 27, 2018

    test_gdb fails on Fedora 28. This happens only in debug build, and only if built with control flow protection flags: -mcet -fcf-protection AND optimization -O0.

    Reproduction steps on Fedora 28 (x86_64):

    ./configure --with-pydebug
    make 'EXTRA_CFLAGS=-mcet -fcf-protection -O0'
    make test TESTOPTS='-v test_gdb'

    Actual result:

    Re-running test 'test_gdb' in verbose mode
    GDB version 8.1:
    GNU gdb (GDB) Fedora 8.1-8.fc28
    Copyright (C) 2018 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html\>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/\>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/\>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word".
    test_NULL_ob_type (test.test_gdb.PrettyPrintTests)
    Ensure that a PyObject* with NULL ob_type is handled gracefully ... ok
    test_NULL_ptr (test.test_gdb.PrettyPrintTests)
    Ensure that a NULL PyObject* is handled gracefully ... ok
    test_builtin_method (test.test_gdb.PrettyPrintTests) ... FAIL
    test_builtins_help (test.test_gdb.PrettyPrintTests)
    Ensure that the new-style class _Helper in site.py can be handled ... FAIL
    test_bytes (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of bytes ... FAIL
    test_corrupt_ob_type (test.test_gdb.PrettyPrintTests)
    Ensure that a PyObject* with a corrupt ob_type is handled gracefully ... ok
    test_corrupt_tp_flags (test.test_gdb.PrettyPrintTests)
    Ensure that a PyObject* with a type with corrupt tp_flags is handled ... ok
    test_corrupt_tp_name (test.test_gdb.PrettyPrintTests)
    Ensure that a PyObject* with a type with corrupt tp_name is handled ... ok
    test_dicts (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of dictionaries ... FAIL
    test_exceptions (test.test_gdb.PrettyPrintTests) ... FAIL
    test_frames (test.test_gdb.PrettyPrintTests) ... FAIL
    test_frozensets (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of frozensets ... FAIL
    test_getting_backtrace (test.test_gdb.PrettyPrintTests) ... ok
    test_int (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of various int values ... FAIL
    test_lists (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of lists ... FAIL
    test_modern_class (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of new-style class instances ... FAIL
    test_selfreferential_dict (test.test_gdb.PrettyPrintTests)
    Ensure that a reference loop involving a dict doesn't lead proxyval ... FAIL
    test_selfreferential_list (test.test_gdb.PrettyPrintTests)
    Ensure that a reference loop involving a list doesn't lead proxyval ... FAIL
    test_selfreferential_new_style_instance (test.test_gdb.PrettyPrintTests) ... FAIL
    test_selfreferential_old_style_instance (test.test_gdb.PrettyPrintTests) ... FAIL
    test_sets (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of sets ... FAIL
    test_singletons (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of True, False and None ... FAIL
    test_strings (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of unicode strings ... FAIL
    test_subclassing_list (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of an instance of a list subclass ... FAIL
    test_subclassing_tuple (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of an instance of a tuple subclass ... FAIL
    test_truncation (test.test_gdb.PrettyPrintTests)
    Verify that very long output is truncated ... FAIL
    test_tuples (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of tuples ... FAIL
    test_basic_command (test.test_gdb.PyListTests)
    Verify that the "py-list" command works ... FAIL
    test_one_abs_arg (test.test_gdb.PyListTests)
    Verify the "py-list" command with one absolute argument ... FAIL
    test_two_abs_args (test.test_gdb.PyListTests)
    Verify the "py-list" command with two absolute arguments ... FAIL
    test_down_at_bottom (test.test_gdb.StackNavigationTests)
    Verify handling of "py-down" at the bottom of the stack ... FAIL
    test_pyup_command (test.test_gdb.StackNavigationTests)
    Verify that the "py-up" command works ... FAIL
    test_up_at_top (test.test_gdb.StackNavigationTests)
    Verify handling of "py-up" at the top of the stack ... FAIL
    test_up_then_down (test.test_gdb.StackNavigationTests)
    Verify "py-up" followed by "py-down" ... FAIL
    test_bt (test.test_gdb.PyBtTests)
    Verify that the "py-bt" command works ... FAIL
    test_bt_full (test.test_gdb.PyBtTests)
    Verify that the "py-bt-full" command works ... FAIL
    test_gc (test.test_gdb.PyBtTests)
    Verify that "py-bt" indicates if a thread is garbage-collecting ... ok
    test_pycfunction (test.test_gdb.PyBtTests)
    Verify that "py-bt" displays invocations of PyCFunction instances ... ok
    test_threads (test.test_gdb.PyBtTests)
    Verify that "py-bt" indicates threads that are waiting for the GIL ... ok
    test_wrapper_call (test.test_gdb.PyBtTests) ... FAIL
    test_basic_command (test.test_gdb.PyPrintTests)
    Verify that the "py-print" command works ... FAIL
    test_print_after_up (test.test_gdb.PyPrintTests) ... FAIL
    test_printing_builtin (test.test_gdb.PyPrintTests) ... FAIL
    test_printing_global (test.test_gdb.PyPrintTests) ... FAIL
    test_basic_command (test.test_gdb.PyLocalsTests) ... FAIL
    test_locals_after_up (test.test_gdb.PyLocalsTests) ... FAIL
    ======================================================================
    FAIL: test_builtin_method (test.test_gdb.PrettyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 617, in test_builtin_method
        (gdb_repr, gdb_output))
    AssertionError: None is not true : Unexpected gdb representation: '<unknown at remote 0x555555759c40>'
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<unknown at remote 0x555555759c40>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<unknown at remote 0x555555759c40>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_builtins_help (test.test_gdb.PrettyPrintTests)
    Ensure that the new-style class _Helper in site.py can be handled
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 523, in test_builtins_help
        msg='Unexpected rendering %r' % gdb_repr)
    AssertionError: None is not true : Unexpected rendering '<unknown at remote 0x7fffffffc7a8>'

    ======================================================================
    FAIL: test_bytes (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of bytes
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 307, in test_bytes
        self.assertGdbRepr(b'')
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-in[326 chars]3b8>" != "b''"
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + b''
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected "b''"; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_dicts (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of dictionaries
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 295, in test_dicts
        self.assertGdbRepr({})
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-i[327 chars]3b8>" != '{}'
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + {}
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected '{}'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_exceptions (test.test_gdb.PrettyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 393, in test_exceptions
        ''')
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 241, in get_gdb_repr
        import_site=import_site)
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[197 chars]e: "] != []
    First list contains 2 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xb0 in position 0: invalid start byte: ',
    -  "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xb0 in position 0: invalid start byte: ']

    ======================================================================
    FAIL: test_frames (test.test_gdb.PrettyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 627, in test_frames
        cmds_after_breakpoint=['print (PyFrameObject*)(((PyCodeObject*)v)->co_zombieframe)']
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ['Cannot access memory at address 0x90'] != []
    First list contains 1 additional elements.
    First extra element 0:
    'Cannot access memory at address 0x90'
    - ['Cannot access memory at address 0x90']
    + []

    ======================================================================
    FAIL: test_frozensets (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of frozensets
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 379, in test_frozensets
        self.assertGdbRepr(frozenset(), "frozenset()")
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: '()' != 'frozenset()'
    - ()
    + frozenset()
     : '()' did not equal expected 'frozenset()'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=()) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=()) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_int (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of various int values
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 281, in test_int
        self.assertGdbRepr(42)
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-i[327 chars]3b8>" != '42'
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + 42
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected '42'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_lists (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of lists
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 302, in test_lists
        self.assertGdbRepr([])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-i[327 chars]3b8>" != '[]'
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + []
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected '[]'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_modern_class (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of new-style class instances
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 418, in test_modern_class
        msg='Unexpected new-style class rendering %r' % gdb_repr)
    AssertionError: None is not true : Unexpected new-style class rendering '<unknown at remote 0x7ffff7e47360>'

    ======================================================================
    FAIL: test_selfreferential_dict (test.test_gdb.PrettyPrintTests)
    Ensure that a reference loop involving a dict doesn't lead proxyval
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 542, in test_selfreferential_dict
        self.assertEqual(gdb_repr, "{'foo': {'bar': {...}}}")
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-in[326 chars]3b8>" != "{'foo': {'bar': {...}}}"
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + {'foo': {'bar': {...}}}

    ======================================================================
    FAIL: test_selfreferential_list (test.test_gdb.PrettyPrintTests)
    Ensure that a reference loop involving a list doesn't lead proxyval
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 530, in test_selfreferential_list
        self.assertEqual(gdb_repr, '[3, 4, 5, [...]]')
    AssertionError: '<unknown at remote 0xf7e4a1a8>' != '[3, 4, 5, [...]]'
    - <unknown at remote 0xf7e4a1a8>
    + [3, 4, 5, [...]]

    ======================================================================
    FAIL: test_selfreferential_new_style_instance (test.test_gdb.PrettyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 568, in test_selfreferential_new_style_instance
        (gdb_repr, gdb_output))
    AssertionError: None is not true : Unexpected gdb representation: '<unknown at remote 0x7ffff7e47360>'
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<unknown at remote 0x7ffff7e47360>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<unknown at remote 0x7ffff7e47360>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_selfreferential_old_style_instance (test.test_gdb.PrettyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 555, in test_selfreferential_old_style_instance
        (gdb_repr, gdb_output))
    AssertionError: None is not true : Unexpected gdb representation: '<unknown at remote 0x7ffff7e47360>'
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<unknown at remote 0x7ffff7e47360>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<unknown at remote 0x7ffff7e47360>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_sets (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of sets
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 361, in test_sets
        self.assertGdbRepr(set(), "set()")
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: '()' != 'set()'
    - ()
    + set()
     : '()' did not equal expected 'set()'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=()) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=()) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_singletons (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of True, False and None
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 289, in test_singletons
        self.assertGdbRepr(True)
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-i[327 chars]3b8>" != 'True'
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + True
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected 'True'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_strings (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of unicode strings
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 331, in test_strings
        self.assertGdbRepr('')
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-in[326 chars]3b8>" != "''"
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + ''
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected "''"; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_subclassing_list (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of an instance of a list subclass
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 432, in test_subclassing_list
        msg='Unexpected new-style class rendering %r' % gdb_repr)
    AssertionError: None is not true : Unexpected new-style class rendering '<unknown at remote 0x7ffff7e475b8>'

    ======================================================================
    FAIL: test_subclassing_tuple (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of an instance of a tuple subclass
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 447, in test_subclassing_tuple
        msg='Unexpected new-style class rendering %r' % gdb_repr)
    AssertionError: None is not true : Unexpected new-style class rendering '<unknown at remote 0x7ffff7e47360>'

    ======================================================================
    FAIL: test_truncation (test.test_gdb.PrettyPrintTests)
    Verify that very long output is truncated
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 588, in test_truncation
        "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, "
    AssertionError: '<unknown at remote 0x7ffff7e395d0>' != '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12[993 chars]ted)'
    Diff is 1079 characters long. Set self.maxDiff to None to see it.

    ======================================================================
    FAIL: test_tuples (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of tuples
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 353, in test_tuples
        self.assertGdbRepr(tuple(), '()')
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 277, in assertGdbRepr
        % (gdb_repr, exp_repr, gdb_output)))
    AssertionError: "<CodecInfo(name='utf-8', encode=<built-i[327 chars]3b8>" != '()'
    - <CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>
    + ()
     : "<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>" did not equal expected '()'; full output was:
    Breakpoint 1 (builtin_id) pending.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    Breakpoint 1, builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120
    1120	{
    #0  builtin_id (self=, v=<CodecInfo(name='utf-8', encode=<built-in method utf_8_encode of module object at remote 0x7ffff7e87ad8>, decode=<function at remote 0x7ffff7e19560>, incrementalencoder=<type at remote 0x5555557b26e8>, incrementaldecoder=<type at remote 0x5555557b2ae8>, streamwriter=<type at remote 0x5555557b2ee8>, streamreader=<type at remote 0x5555557b32e8>) at remote 0x7ffff7e7e3b8>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120

    ======================================================================
    FAIL: test_basic_command (test.test_gdb.PyListTests)
    Verify that the "py-list" command works
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 643, in test_basic_command
        cmds_after_breakpoint=['py-list'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_one_abs_arg (test.test_gdb.PyListTests)
    Verify the "py-list" command with one absolute argument
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 658, in test_one_abs_arg
        cmds_after_breakpoint=['py-list 9'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_two_abs_args (test.test_gdb.PyListTests)
    Verify the "py-list" command with two absolute arguments
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 669, in test_two_abs_args
        cmds_after_breakpoint=['py-list 1,3'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_down_at_bottom (test.test_gdb.StackNavigationTests)
    Verify handling of "py-down" at the bottom of the stack
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 694, in test_down_at_bottom
        cmds_after_breakpoint=['py-down'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_pyup_command (test.test_gdb.StackNavigationTests)
    Verify that the "py-up" command works
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 683, in test_pyup_command
        cmds_after_breakpoint=['py-up', 'py-up'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_up_at_top (test.test_gdb.StackNavigationTests)
    Verify handling of "py-up" at the top of the stack
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 702, in test_up_at_top
        cmds_after_breakpoint=['py-up'] * 5)
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_up_then_down (test.test_gdb.StackNavigationTests)
    Verify "py-up" followed by "py-down"
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 712, in test_up_then_down
        cmds_after_breakpoint=['py-up', 'py-up', 'py-down'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_bt (test.test_gdb.PyBtTests)
    Verify that the "py-bt" command works
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 727, in test_bt
        cmds_after_breakpoint=['py-bt'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_bt_full (test.test_gdb.PyBtTests)
    Verify that the "py-bt-full" command works
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 747, in test_bt_full
        cmds_after_breakpoint=['py-bt-full'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_wrapper_call (test.test_gdb.PyBtTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 866, in test_wrapper_call
        r"<method-wrapper u?'__init__' of MyList object at ")
    AssertionError: Regex didn't match: "<method-wrapper u?'__init__' of MyList object at " not found in 'Breakpoint 1 (builtin_id) pending.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib64/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=, v=<unknown at remote 0xf7e4d238>) at /builddir/build/BUILD/Python-3.6.4/Python/bltinmodule.c:1120\n1120\t{\nBreakpoint 2: file /builddir/build/BUILD/Python-3.6.4/Objects/descrobject.c, line 1166.\n\nBreakpoint 2, wrapper_call (wp=<unknown at remote 0x7ffff7e71798>, args=0x0, kwds=<unknown at remote 0x7ffff77e8081>) at /builddir/build/BUILD/Python-3.6.4/Objects/descrobject.c:1166\n1166\t{\nTraceback (most recent call first):\n  <unknown at remote 0x7ffff7e71798>\n  File "<string>", line 4, in __init__\n  File "<string>", line 7, in <module>\n'

    ======================================================================
    FAIL: test_basic_command (test.test_gdb.PyPrintTests)
    Verify that the "py-print" command works
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 875, in test_basic_command
        cmds_after_breakpoint=['py-up', 'py-print args'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_print_after_up (test.test_gdb.PyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 884, in test_print_after_up
        cmds_after_breakpoint=['py-up', 'py-up', 'py-print c', 'py-print b', 'py-print a'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_printing_builtin (test.test_gdb.PyPrintTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 900, in test_printing_builtin
        cmds_after_breakpoint=['py-up', 'py-print len'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_printing_global (test.test_gdb.PyPrintTests)test test_gdb failed
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 892, in test_printing_global
        cmds_after_breakpoint=['py-up', 'py-print __name__'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_basic_command (test.test_gdb.PyLocalsTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 909, in test_basic_command
        cmds_after_breakpoint=['py-up', 'py-locals'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    ======================================================================
    FAIL: test_locals_after_up (test.test_gdb.PyLocalsTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 918, in test_locals_after_up
        cmds_after_breakpoint=['py-up', 'py-up', 'py-locals'])
      File "/builddir/build/BUILD/Python-3.6.4/Lib/test/test_gdb.py", line 219, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ["Python Exception <class 'UnicodeDecodeEr[82 chars]e: "] != []
    First list contains 1 additional elements.
    First extra element 0:
    "Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte: "
    + []
    - ["Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode "
    -  'byte 0xf3 in position 0: invalid continuation byte: ']

    Ran 46 tests in 20.175s
    FAILED (failures=37)
    1 test failed again:
    test_gdb
    Total duration: 29 min 42 sec
    Tests result: FAILURE

    Expected result: no failures

    Original bug report: https://bugzilla.redhat.com/show_bug.cgi?id=1541967

    @irushchyshyn irushchyshyn mannequin added the tests Tests in the Lib/test dir label Feb 27, 2018
    @stratakis
    Copy link
    Mannequin

    stratakis mannequin commented May 28, 2018

    Ping. Could someone take a look? There is a PR ready.

    @vstinner
    Copy link
    Member

    New changeset 019d33b by Victor Stinner in branch 'master':
    bpo-32962: python-gdb catchs ValueError on read_var() (GH-7692)
    019d33b

    @serhiy-storchaka
    Copy link
    Member

    Wouldn't be better to use the "surrogateescape" or the "backslashreplace" error handlers?

    @vstinner
    Copy link
    Member

    Wouldn't be better to use the "surrogateescape" or the "backslashreplace" error handlers?

    Are you talking about my #7693 fix? If yes, the error comes from the string() method which comes from the gdb API. I don't see how to control how gdb decodes bytes.

    @vstinner
    Copy link
    Member

    New changeset d22fc0b by Victor Stinner in branch 'master':
    bpo-32962: python-gdb catchs UnicodeDecodeError (GH-7693)
    d22fc0b

    @vstinner
    Copy link
    Member

    Reminder: test_gdb is skipped on Travis CI and AppVeyor. I tested my two changes manually. I will backport python-gdb.py enhancements to other branches once PR 6754 fix will be merged.

    @vstinner
    Copy link
    Member

    New changeset 9b7c74c by Victor Stinner (Marcel Plch) in branch 'master':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (bpo-6754)
    9b7c74c

    @vstinner
    Copy link
    Member

    New changeset ca4cb84 by Victor Stinner in branch '3.7':
    [3.7] bpo-32962: Backport python-gdb.py and test_gdb.py from master (GH-7710)
    ca4cb84

    @vstinner
    Copy link
    Member

    New changeset 5279759 by Victor Stinner in branch '3.6':
    bpo-32962: Backport python-gdb.py and test_gdb.py from master (GH-7710) (GH-7711)
    5279759

    @vstinner
    Copy link
    Member

    Oh :-( The change caused two buildbot failures, so I wrote PR 7723 to revert it.

    x86 Gentoo Non-Debug with X 3.x:
    http://buildbot.python.org/all/#/builders/99/builds/1095

    ======================================================================
    FAIL: test_NULL_ptr (test.test_gdb.PrettyPrintTests)
    Ensure that a NULL PyObject* is handled gracefully
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 481, in test_NULL_ptr
        'backtrace'])
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 239, in get_gdb_repr
        import_site=import_site)
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 217, in get_stack_trace
        self.assertEqual(unexpected_errlines, [])
    AssertionError: Lists differ: ['No symbol "v" in current context.'] != []

    First list contains 1 additional elements.
    First extra element 0:
    'No symbol "v" in current context.'

    • ['No symbol "v" in current context.']
      + []

    ======================================================================
    FAIL: test_builtins_help (test.test_gdb.PrettyPrintTests)
    Ensure that the new-style class _Helper in site.py can be handled
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 517, in test_builtins_help
        gdb_repr, gdb_output = self.get_gdb_repr('id(__builtins__.help)', import_site=True)
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 246, in get_gdb_repr
        self.fail('Unexpected gdb output: %r\n%s' % (gdb_output, gdb_output))
    AssertionError: Unexpected gdb output: 'Breakpoint 1 at 0xf1670: file Python/bltinmodule.c, line 1204.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=, v=<_Helper at remote 0xb796c2ec>) at Python/bltinmodule.c:1204\n1204\t{\n__x86.get_pc_thunk.bx ()\n#0  __x86.get_pc_thunk.bx ()\n'
    Breakpoint 1 at 0xf1670: file Python/bltinmodule.c, line 1204.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/libthread_db.so.1".

    Breakpoint 1, builtin_id (self=, v=<_Helper at remote 0xb796c2ec>) at Python/bltinmodule.c:1204
    1204 {
    __x86.get_pc_thunk.bx ()
    #0 __x86.get_pc_thunk.bx ()

    ======================================================================
    FAIL: test_up_at_top (test.test_gdb.StackNavigationTests)
    Verify handling of "py-up" at the top of the stack
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 702, in test_up_at_top
        'Unable to find an older python frame\n')
      File "/buildbot/buildarea/3.x.ware-gentoo-x86.nondebug/build/Lib/test/test_gdb.py", line 252, in assertEndsWith
        msg='%r did not end with %r' % (actual, exp_end))
    AssertionError: False is not true : 'Breakpoint 1 at 0xf1670: file Python/bltinmodule.c, line 1204.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=, v=42) at Python/bltinmodule.c:1204\n1204\t{\n__x86.get_pc_thunk.bx ()\nUnable to locate python frame\nUnable to locate python frame\nUnable to locate python frame\nUnable to locate python frame\nUnable to locate python frame\n' did not end with 'Unable to find an older python frame\n'

    AMD64 Debian PGO 3.x:
    http://buildbot.python.org/all/#/builders/47/builds/1173

    ======================================================================
    FAIL: test_tuples (test.test_gdb.PrettyPrintTests)
    Verify the pretty-printing of tuples
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/var/lib/buildbot/slaves/enable-optimizations-bot/3.x.gps-debian-profile-opt.nondebug/build/Lib/test/test_gdb.py", line 351, in test_tuples
        self.assertGdbRepr(tuple(), '()')
      File "/var/lib/buildbot/slaves/enable-optimizations-bot/3.x.gps-debian-profile-opt.nondebug/build/Lib/test/test_gdb.py", line 270, in assertGdbRepr
        gdb_repr, gdb_output = self.get_gdb_repr('id(' + ascii(val) + ')')
      File "/var/lib/buildbot/slaves/enable-optimizations-bot/3.x.gps-debian-profile-opt.nondebug/build/Lib/test/test_gdb.py", line 246, in get_gdb_repr
        self.fail('Unexpected gdb output: %r\n%s' % (gdb_output, gdb_output))
    AssertionError: Unexpected gdb output: 'Breakpoint 1 at 0x16dc20: file Python/bltinmodule.c, line 1205.\n[Thread debugging using libthread_db enabled]\nUsing host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".\n\nBreakpoint 1, builtin_id (self=, v=()) at Python/bltinmodule.c:1205\n1205\t    return PyLong_FromVoidPtr(v);\nPyLong_FromVoidPtr () at Objects/longobject.c:1021\n1021\t{\n#0  PyLong_FromVoidPtr () at Objects/longobject.c:1021\n'
    Breakpoint 1 at 0x16dc20: file Python/bltinmodule.c, line 1205.
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

    Breakpoint 1, builtin_id (self=, v=()) at Python/bltinmodule.c:1205
    1205 return PyLong_FromVoidPtr(v);
    PyLong_FromVoidPtr () at Objects/longobject.c:1021
    1021 {
    #0 PyLong_FromVoidPtr () at Objects/longobject.c:1021

    @vstinner
    Copy link
    Member

    Oh :-( The change caused two buildbot failures, so I wrote PR 7723 to revert it.

    It seems to only be related to this change:
    """
    New changeset 9b7c74c by Victor Stinner (Marcel Plch) in branch 'master':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (bpo-6754)
    9b7c74c
    """

    Since I also backported this change to 3.7 and 3.6, buildbot of 3.7 and 3.6 also failed:

    AMD64 Debian PGO 3.7
    http://buildbot.python.org/all/#builders/128/builds/417

    AMD64 Debian PGO 3.6
    http://buildbot.python.org/all/#builders/77/builds/419

    x86 Gentoo Non-Debug with X 3.7
    http://buildbot.python.org/all/#builders/115/builds/365

    @vstinner
    Copy link
    Member

    New changeset 2f9cbaa by Victor Stinner in branch 'master':
    Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" (bpo-7723)
    2f9cbaa

    @vstinner
    Copy link
    Member

    New changeset 74565aa by Victor Stinner in branch '3.6':
    Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" (bpo-7725)
    74565aa

    @vstinner
    Copy link
    Member

    New changeset ba67b4f by Victor Stinner in branch '3.7':
    Revert "bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-6754)" (bpo-7724)
    ba67b4f

    @vstinner
    Copy link
    Member

    New changeset e36f94f by Victor Stinner in branch '2.7':
    bpo-32962: Backport python-gdb.py and test_gdb.py from master (GH-7726)
    e36f94f

    @Dormouse759
    Copy link
    Mannequin

    Dormouse759 mannequin commented Jun 18, 2018

    The problem is with this function:
    static PyObject *
    builtin_id(PyModuleDef *self, PyObject *v)
    /*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
    {
        return PyLong_FromVoidPtr(v);
    }

    It's a one-liner, so the compiler really likes to inline it.

    Without the inline optimization, the additional "next" command makes a jump into the function.

    But when the function is inlined and you set a breakpoint to it, the line is just seen as a function from the debugger, that means you already are inside and the "next" makes the debugger exit this line, and so the function.

    More graphical explanation:
    non-inline case:
    br
    {
    next
    return PyLong_FromVoidPtr(v);

    inline case:
    br
    return PyLong_FromVoidPtr(v);
    next
    "Some code without access to the func arguments' debug symbols"

    I propose two possible solutions:

    1. Skip whole test_gdb when optimizations are used (who debugs with them anyway?)
    2. Conditionalize the "next". (this could be hard as we would need to know when the function is inlined)

    Also, I have found out that when configured with --with-pydebug and --enable-optimizations, tests stop to fail. (the failing bots are configuring with --enable-optimizations only)

    @stratakis
    Copy link
    Mannequin

    stratakis mannequin commented Jun 18, 2018

    I'd say there are use cases where gdb will be used with optimizations especially in downstream distribution.

    @vstinner
    Copy link
    Member

    1. Skip whole test_gdb when optimizations are used (who debugs with them anyway?)

    It's already done, no? But the title issue is "-mcet -fcf-protection
    -O0" and -O0 disables optimizations.

    @vstinner
    Copy link
    Member

    Related issue: bpo-31237.

    @Dormouse759
    Copy link
    Mannequin

    Dormouse759 mannequin commented Jun 19, 2018

    It's already done, no? But the title issue is "-mcet -fcf-protection
    -O0" and -O0 disables optimizations.

    Some of the simple tests are still run even with optimizations.
    Disabled optimizations is what we want, because then the function doesn't get inlined --> the 'next' jumps in, not out.

    @vstinner
    Copy link
    Member

    Oh I see. But currently, many test_gdb tests pass even with optimization. I dislike reducing the test coverage when Python is compiled with optimizations, just to support -mcet -fcf-protection.

    Would it be possible to detect the special case "-mcet -fcf-protection" *and* optimizations, and only skip test_gdb in that case?

    @vstinner
    Copy link
    Member

    vstinner commented Oct 9, 2018

    More info about -fcf-protection=full -mcet:

    "Enable control flow protection on x86-64 using -fcf-protection=full -mcet."
    https://fedoraproject.org/wiki/Changes/HardeningFlags28

    man gcc:

       -fcf-protection=[full|branch|return|none]
           Enable code instrumentation of control-flow transfers to increase
           program security by checking that target addresses of control-flow
           transfer instructions (such as indirect function call, function
           return, indirect jump) are valid.  This prevents diverting the flow
           of control to an unexpected target.  This is intended to protect
           against such threats as Return-oriented Programming (ROP), and
           similarly call/jmp-oriented programming (COP/JOP).
    
           The value "branch" tells the compiler to implement checking of
           validity of control-flow transfer at the point of indirect branch
           instructions, i.e. call/jmp instructions.  The value "return"
           implements checking of validity at the point of returning from a
           function.  The value "full" is an alias for specifying both
           "branch" and "return". The value "none" turns off instrumentation.
    
           The macro "__CET__" is defined when -fcf-protection is used.  The
           first bit of "__CET__" is set to 1 for the value "branch" and the
           second bit of "__CET__" is set to 1 for the "return".
    
           You can also use the "nocf_check" attribute to identify which
           functions and calls should be skipped from instrumentation.
    
           Currently the x86 GNU/Linux target provides an implementation based
           on Intel Control-flow Enforcement Technology (CET).
    

    @vstinner
    Copy link
    Member

    vstinner commented Oct 9, 2018

    I tested the following configurations on my Fedora 28:

    ./configure --with-pydebug CFLAGS=-O0 -mcet -fcf-protection
    ./configure CFLAGS=-mcet -fcf-protection
    ./configure --with-pydebug CFLAGS=-O0 -mcet -fcf-protection=none
    ./configure CFLAGS=-mcet -fcf-protection=none
    ./configure --with-pydebug CFLAGS=-O0 -mcet -fcf-protection=branch
    ./configure CFLAGS=-mcet -fcf-protection=branch
    ./configure --with-pydebug CFLAGS=-O0 -mcet -fcf-protection=return
    ./configure CFLAGS=-mcet -fcf-protection=return
    ./configure --with-pydebug CFLAGS=-O0 -mcet -fcf-protection=full
    ./configure CFLAGS=-mcet -fcf-protection=full

    test_gdb now pass with all these configurations

    @vstinner
    Copy link
    Member

    vstinner commented Oct 9, 2018

    New changeset 79d2133 by Victor Stinner in branch 'master':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656)
    79d2133

    @miss-islington
    Copy link
    Contributor

    New changeset 25bfb1a by Miss Islington (bot) in branch '3.6':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656)
    25bfb1a

    @miss-islington
    Copy link
    Contributor

    New changeset 0ce31d3 by Miss Islington (bot) in branch '3.7':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656)
    0ce31d3

    @vstinner
    Copy link
    Member

    New changeset b274f1c by Victor Stinner in branch '2.7':
    bpo-32962: Fix test_gdb failure in debug build with -mcet -fcf-protection -O0 (GH-9656) (GH-9788)
    b274f1c

    @vstinner
    Copy link
    Member

    Ok, the issue should now be fixed.

    Thanks Iryna Shcherbina for your bug report, and thanks Marcel Plch for your initial fix! Marcel: my final fix is based on yours, I just made the "next" conditional.

    @vstinner vstinner added 3.7 (EOL) end of life 3.8 (EOL) end of life labels Oct 10, 2018
    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.7 (EOL) end of life 3.8 (EOL) end of life tests Tests in the Lib/test dir
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants