qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

user.c (1456B)


      1 /*
      2  * gdbstub user-mode helper routines.
      3  *
      4  * We know for user-mode we are using TCG so we can call stuff directly.
      5  *
      6  * Copyright (c) 2022 Linaro Ltd
      7  *
      8  * SPDX-License-Identifier: GPL-2.0-or-later
      9  */
     10 
     11 #include "qemu/osdep.h"
     12 #include "exec/hwaddr.h"
     13 #include "exec/gdbstub.h"
     14 #include "hw/core/cpu.h"
     15 #include "internals.h"
     16 
     17 bool gdb_supports_guest_debug(void)
     18 {
     19     /* user-mode == TCG == supported */
     20     return true;
     21 }
     22 
     23 int gdb_breakpoint_insert(CPUState *cs, int type, hwaddr addr, hwaddr len)
     24 {
     25     CPUState *cpu;
     26     int err = 0;
     27 
     28     switch (type) {
     29     case GDB_BREAKPOINT_SW:
     30     case GDB_BREAKPOINT_HW:
     31         CPU_FOREACH(cpu) {
     32             err = cpu_breakpoint_insert(cpu, addr, BP_GDB, NULL);
     33             if (err) {
     34                 break;
     35             }
     36         }
     37         return err;
     38     default:
     39         /* user-mode doesn't support watchpoints */
     40         return -ENOSYS;
     41     }
     42 }
     43 
     44 int gdb_breakpoint_remove(CPUState *cs, int type, hwaddr addr, hwaddr len)
     45 {
     46     CPUState *cpu;
     47     int err = 0;
     48 
     49     switch (type) {
     50     case GDB_BREAKPOINT_SW:
     51     case GDB_BREAKPOINT_HW:
     52         CPU_FOREACH(cpu) {
     53             err = cpu_breakpoint_remove(cpu, addr, BP_GDB);
     54             if (err) {
     55                 break;
     56             }
     57         }
     58         return err;
     59     default:
     60         /* user-mode doesn't support watchpoints */
     61         return -ENOSYS;
     62     }
     63 }
     64 
     65 void gdb_breakpoint_remove_all(CPUState *cs)
     66 {
     67     cpu_breakpoint_remove_all(cs, BP_GDB);
     68 }