/* access potentially dodgy memory through a potentially dodgy pointer  */
static int gdbstub_read_dword(const void *addr, uint32_t *_res)
/* access potentially dodgy memory through a potentially dodgy pointer  */
static int gdbstub_read_dword(const void *addr, uint32_t *_res)
{
	unsigned long brr;
	uint32_t res;
	if (!gdbstub_addr_map(addr))
		return 0;
	asm volatile("	movgs	gr0,brr	\n"
		     "	ld%I2	%M2,%0	\n"
		     "	movsg	brr,%1	\n"
		     : "=r"(res), "=r"(brr)
		     : "m"(*(uint32_t *) addr));
	*_res = res;
	gdbstub_addr_unmap();
	return likely(!brr);
}