Changeset View
Changeset View
Standalone View
Standalone View
devel/gdb/files/kgdb/riscv-fbsd-kern.c
Show All 16 Lines | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||||
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, | * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
* | |||||
*/ | */ | ||||
/* Target-dependent code for FreeBSD/riscv64 kernels. */ | /* Target-dependent code for FreeBSD/riscv64 kernels. */ | ||||
#include "defs.h" | #include "defs.h" | ||||
#include "riscv-tdep.h" | #include "riscv-tdep.h" | ||||
#include "frame-unwind.h" | #include "frame-unwind.h" | ||||
▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | riscv_fbsd_trapframe_sniffer (const struct frame_unwind *self, | ||||
find_pc_partial_function (get_frame_func (this_frame), &name, NULL, NULL); | find_pc_partial_function (get_frame_func (this_frame), &name, NULL, NULL); | ||||
return (name != NULL | return (name != NULL | ||||
&& ((strcmp (name, "cpu_exception_handler_user") == 0) || | && ((strcmp (name, "cpu_exception_handler_user") == 0) || | ||||
(strcmp (name, "cpu_exception_handler_supervisor") == 0))); | (strcmp (name, "cpu_exception_handler_supervisor") == 0))); | ||||
} | } | ||||
static const struct frame_unwind riscv_fbsd_trapframe_unwind = { | static const struct frame_unwind riscv_fbsd_trapframe_unwind = { | ||||
"riscv FreeBSD kernel trap", | |||||
SIGTRAMP_FRAME, | SIGTRAMP_FRAME, | ||||
default_frame_unwind_stop_reason, | default_frame_unwind_stop_reason, | ||||
riscv_fbsd_trapframe_this_id, | riscv_fbsd_trapframe_this_id, | ||||
riscv_fbsd_trapframe_prev_register, | riscv_fbsd_trapframe_prev_register, | ||||
NULL, | NULL, | ||||
riscv_fbsd_trapframe_sniffer | riscv_fbsd_trapframe_sniffer | ||||
}; | }; | ||||
/* Implement the 'init_osabi' method of struct gdb_osabi_handler. */ | /* Implement the 'init_osabi' method of struct gdb_osabi_handler. */ | ||||
static void | static void | ||||
riscv_fbsd_kernel_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) | riscv_fbsd_kernel_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) | ||||
{ | { | ||||
frame_unwind_prepend_unwinder (gdbarch, &riscv_fbsd_trapframe_unwind); | frame_unwind_prepend_unwinder (gdbarch, &riscv_fbsd_trapframe_unwind); | ||||
set_solib_ops (gdbarch, &kld_so_ops); | set_solib_ops (gdbarch, &kld_so_ops); | ||||
set_gdbarch_software_single_step (gdbarch, riscv_software_single_step); | set_gdbarch_software_single_step (gdbarch, riscv_software_single_step); | ||||
fbsd_vmcore_set_supply_pcb (gdbarch, riscv_fbsd_supply_pcb); | fbsd_vmcore_set_supply_pcb (gdbarch, riscv_fbsd_supply_pcb); | ||||
fbsd_vmcore_set_cpu_pcb_addr (gdbarch, kgdb_trgt_stop_pcb); | fbsd_vmcore_set_cpu_pcb_addr (gdbarch, kgdb_trgt_stop_pcb); | ||||
} | } | ||||
/* Provide a prototype to silence -Wmissing-prototypes. */ | void _initialize_riscv_kgdb_tdep (); | ||||
extern initialize_file_ftype _initialize_riscv_kgdb_tdep; | |||||
void | void | ||||
_initialize_riscv_kgdb_tdep (void) | _initialize_riscv_kgdb_tdep () | ||||
{ | { | ||||
gdbarch_register_osabi_sniffer(bfd_arch_riscv, | gdbarch_register_osabi_sniffer(bfd_arch_riscv, | ||||
bfd_target_elf_flavour, | bfd_target_elf_flavour, | ||||
fbsd_kernel_osabi_sniffer); | fbsd_kernel_osabi_sniffer); | ||||
gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_FREEBSD_KERNEL, | gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_FREEBSD_KERNEL, | ||||
riscv_fbsd_kernel_init_abi); | riscv_fbsd_kernel_init_abi); | ||||
} | } |