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 breakpoints/19806] Aarch64: watchpoints set on non-8-byte-aligned addresses are always missed


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

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

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

commit a3b60e4588606354b93508a0008a5ca04b68fad8
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Fri May 4 22:22:04 2018 +0200

    aarch64: PR 19806: watchpoints: false negatives + PR 20207 contiguous ones

    Some unaligned watchpoints were currently missed.

    On old kernels as specified in
        kernel RFE: aarch64: ptrace: BAS: Support any contiguous range (edit)
        https://sourceware.org/bugzilla/show_bug.cgi?id=20207
    after this patch some other unaligned watchpoints will get reported as
false
    positives.

    With new kernels all the watchpoints should work exactly.

    There may be a regresion that it now less merges watchpoints so that with
    multiple overlapping watchpoints it may run out of the 4 hardware
watchpoint
    registers.  But as discussed in the original thread GDB needs some generic
    watchpoints merging framework to be used by all the target specific code.
    Even current FSF GDB code does not merge it perfectly.  Also with the more
    precise watchpoints one can technically merge them less.  And I do not
think
    it matters too much to improve mergeability only for old kernels.
    Still even on new kernels some better merging logic would make sense.

    There remains one issue:
        kernel-4.15.14-300.fc27.armv7hl
        FAIL: gdb.base/watchpoint-unaligned.exp: continue
        FAIL: gdb.base/watchpoint-unaligned.exp: continue
        (gdb) continue
        Continuing.
        Unexpected error setting watchpoint: Invalid argument.
        (gdb) FAIL: gdb.base/watchpoint-unaligned.exp: continue
    But that looks as a kernel bug to me.
    (1) It is not a regression by this patch.
    (2) It is unrelated to this patch.

    gdb/ChangeLog
    2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Pedro Alves <palves@redhat.com>

        PR breakpoints/19806 and support for PR external/20207.
        * NEWS: Mention Aarch64 watchpoint improvements.
        * aarch64-linux-nat.c (aarch64_linux_stopped_data_address): Fix missed
        watchpoints and PR external/20207 watchpoints.
        * nat/aarch64-linux-hw-point.c
        (kernel_supports_any_contiguous_range): New.
        (aarch64_watchpoint_offset): New.
        (aarch64_watchpoint_length): Support PR external/20207 watchpoints.
        (aarch64_point_encode_ctrl_reg): New parameter offset, new asserts.
        (aarch64_point_is_aligned): Support PR external/20207 watchpoints.
        (aarch64_align_watchpoint): New parameters aligned_offset_p and
        next_addr_orig_p.  Support PR external/20207 watchpoints.
        (aarch64_downgrade_regs): New.
        (aarch64_dr_state_insert_one_point): New parameters offset and
        addr_orig.
        (aarch64_dr_state_remove_one_point): Likewise.
        (aarch64_handle_breakpoint): Update caller.
        (aarch64_handle_aligned_watchpoint): Likewise.
        (aarch64_handle_unaligned_watchpoint): Support addr_orig and
        aligned_offset.
        (aarch64_linux_set_debug_regs): Remove const from state.  Call
        aarch64_downgrade_regs.
        (aarch64_show_debug_reg_state): Print also dr_addr_orig_wp.
        * nat/aarch64-linux-hw-point.h (DR_CONTROL_LENGTH): Rename to ...
        (DR_CONTROL_MASK): ... this.
        (struct aarch64_debug_reg_state): New field dr_addr_orig_wp.
        (unsigned int aarch64_watchpoint_offset): New prototype.
        (aarch64_linux_set_debug_regs): Remove const from state.
        * utils.c (align_up, align_down): Move to ...
        * common/common-utils.c (align_up, align_down): ... here.
        * utils.h (align_up, align_down): Move to ...
        * common/common-utils.h (align_up, align_down): ... here.

    gdb/gdbserver/ChangeLog
    2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Pedro Alves <palves@redhat.com>

        * linux-aarch64-low.c (aarch64_stopped_data_address):
        Likewise.

    gdb/testsuite/ChangeLog
    2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Pedro Alves <palves@redhat.com>

        PR breakpoints/19806 and support for PR external/20207.
        * gdb.base/watchpoint-unaligned.c: New file.
        * gdb.base/watchpoint-unaligned.exp: New file.

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