46#define DR7_G( bp ) ( 2 << ( 2 * (bp) ) )
49#define DR7_GE ( 1 << 9 )
52#define DR7_RWLEN_WRITE 0x11110000
55#define DR7_RWLEN_ACCESS 0x33330000
58#define DR7_RWLEN_1 0x00000000
61#define DR7_RWLEN_2 0x44440000
64#define DR7_RWLEN_4 0xcccc0000
67#define DR7_RWLEN_8 0x88880000
70#define DR7_RWLEN_MASK( bp ) ( 0xf0000 << ( 4 * (bp) ) )
104 for ( i = 0 ; i <
NUM_HWBP ; i++ ) {
172 addr = virt_to_phys ( (
void * )
addr );
177 return ( enable ? -
ENOBUFS : 0 );
180 DBGC ( &
dr[0],
"GDB bp %d at %p+%zx type %d (%sabled)\n",
181 bp, ( (
void * )
addr ),
len,
type, ( enable ?
"en" :
"dis" ) );
184 dr7 = ( (
dr7 & ~mask ) | ( rwlen & mask ) );
203 unsigned long dr7_disabled =
DR7_GE;
204 unsigned long dr6_clear = 0;
210 DBGC ( &
dr[0],
"GDB signal %d\n", signo );
213 DBGC ( &
dr[0],
"GDB signal %d returning\n", signo );
#define NULL
NULL pointer (VOID *)
#define __asmcall
Declare a function with standard calling conventions.
void gdbmach_sigstkflt(void)
void gdbmach_sigill(void)
void gdbmach_sigtrap(void)
void gdbmach_sigfpe(void)
__asm__ __volatile__("call *%9" :"=a"(result), "=c"(discard_ecx), "=d"(discard_edx) :"d"(0), "a"(code), "b"(0), "c"(in_phys), "D"(0), "S"(out_phys), "m"(hypercall))
uint32_t addr
Buffer address.
uint32_t type
Operating system type.
static void gdbmach_update(void)
Update debug registers.
static void * gdbmach_vectors[]
CPU exception vectors.
#define DR7_RWLEN_2
Debug register 7: Two-byte length.
static int gdbmach_find(unsigned long addr, unsigned int rwlen)
Find reusable or available hardware breakpoint.
static unsigned long dr7
Active value of debug register 7.
static unsigned long dr[NUM_HWBP]
Hardware breakpoint addresses (debug registers 0-3)
#define NUM_HWBP
Number of hardware breakpoints.
#define DR7_RWLEN_4
Debug register 7: Four-byte length.
#define DR7_RWLEN_1
Debug register 7: One-byte length.
int gdbmach_set_breakpoint(int type, unsigned long addr, size_t len, int enable)
Set hardware breakpoint.
#define DR7_G(bp)
Debug register 7: Global breakpoint enable.
void gdbmach_init(void)
Initialise GDB.
__asmcall void gdbmach_handler(int signo, gdbreg_t *regs)
Handle exception.
#define DR7_RWLEN_8
Debug register 7: Eight-byte length.
#define DR7_GE
Debug register 7: Global exact breakpoint enable.
#define DR7_RWLEN_ACCESS
Debug register 7: Break on data access.
#define DR7_RWLEN_MASK(bp)
Debug register 7: Breakpoint R/W and length mask.
#define DR7_RWLEN_WRITE
Debug register 7: Break on data writes.
void gdbstub_handler(int signo, gdbreg_t *regs)
Interrupt handler.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define ENOENT
No such file or directory.
#define ENOTSUP
Operation not supported.
#define ENOBUFS
No buffer space available.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Access to external ("user") memory.
void set_interrupt_vector(unsigned int intr, void *vector)
Set interrupt vector.
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")