+2021-01-21  Hannes Domani  <ssbssa@yahoo.de>
+
+       PR python/19151
+       * python/py-breakpoint.c (bppy_get_location): Handle
+       bp_hardware_breakpoint.
+       (bppy_init): Likewise.
+       (gdbpy_breakpoint_created): Likewise.
+
 2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * arm-tdep.c (arm_debug_printf): Add and use throughout file.
 
+2021-01-21  Hannes Domani  <ssbssa@yahoo.de>
+
+       PR python/19151
+       * python.texi (Breakpoints In Python): Document
+       gdb.BP_HARDWARE_BREAKPOINT.
+
 2021-01-01  Joel Brobecker  <brobecker@adacore.com>
 
        * gdb.texinfo, refcard.tex: Update copyright year range.
 
 @item gdb.BP_BREAKPOINT
 Normal code breakpoint.
 
+@vindex BP_HARDWARE_BREAKPOINT
+@item gdb.BP_HARDWARE_BREAKPOINT
+Hardware assisted code breakpoint.
+
 @vindex BP_WATCHPOINT
 @item gdb.BP_WATCHPOINT
 Watchpoint breakpoint.
 
 {
   { "BP_NONE", bp_none},
   { "BP_BREAKPOINT", bp_breakpoint},
+  { "BP_HARDWARE_BREAKPOINT", bp_hardware_breakpoint},
   { "BP_WATCHPOINT", bp_watchpoint},
   { "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint},
   { "BP_READ_WATCHPOINT", bp_read_watchpoint},
 
   BPPY_REQUIRE_VALID (obj);
 
-  if (obj->bp->type != bp_breakpoint)
+  if (obj->bp->type != bp_breakpoint
+      && obj->bp->type != bp_hardware_breakpoint)
     Py_RETURN_NONE;
 
   const char *str = event_location_to_string (obj->bp->location.get ());
       switch (type)
        {
        case bp_breakpoint:
+       case bp_hardware_breakpoint:
          {
            event_location_up location;
            symbol_name_match_type func_name_match_type
            create_breakpoint (python_gdbarch,
                               location.get (), NULL, -1, NULL,
                               0,
-                              temporary_bp, bp_breakpoint,
+                              temporary_bp, type,
                               0,
                               AUTO_BOOLEAN_TRUE,
                               ops,
     return;
 
   if (bp->type != bp_breakpoint
+      && bp->type != bp_hardware_breakpoint
       && bp->type != bp_watchpoint
       && bp->type != bp_hardware_watchpoint
       && bp->type != bp_read_watchpoint
 
+2021-01-21  Hannes Domani  <ssbssa@yahoo.de>
+
+       PR python/19151
+       * gdb.python/py-breakpoint.exp: Add tests for hardware breakpoints.
+
 2021-01-20  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row.
 
        "Check maint info breakpoints shows invisible breakpoints"
 }
 
+proc_with_prefix test_hardware_breakpoints { } {
+    global srcfile testfile hex decimal
+
+    # Start with a fresh gdb.
+    clean_restart ${testfile}
+
+    if ![runto_main] then {
+       fail "cannot run to main."
+       return 0
+    }
+
+    delete_breakpoints
+
+    gdb_test "python hbp1 = gdb.Breakpoint(\"add\", type=gdb.BP_HARDWARE_BREAKPOINT)" \
+       ".*Hardware assisted breakpoint ($decimal)+ at .*$srcfile, line ($decimal)+\." \
+       "Set hardware breakpoint"
+    gdb_test "python print (gdb.breakpoints()\[0\].type == gdb.BP_HARDWARE_BREAKPOINT)" \
+       "True" "Check hardware breakpoint type"
+    gdb_test "continue" \
+       ".*Breakpoint ($decimal)+, add.*" \
+       "Test hardware breakpoint stop"
+}
+
 proc_with_prefix test_watchpoints { } {
     global srcfile testfile hex decimal
 
 test_bkpt_deletion
 test_bkpt_cond_and_cmds
 test_bkpt_invisible
+test_hardware_breakpoints
 test_watchpoints
 test_bkpt_internal
 test_bkpt_eval_funcs