It looks like there definitely is a weakness that leaves the
i386_dr_low structure unset if that macro is not defined. But
as far as I can tell, it's working just great for me.
The code in question is _initialize_i386fbsd_nat:
#ifdef HAVE_PT_GETDBREGS
i386_use_watchpoints (t);
i386_dr_low.set_control = i386bsd_dr_set_control;
i386_dr_low.set_addr = i386bsd_dr_set_addr;
i386_dr_low.reset_addr = i386bsd_dr_reset_addr;
i386_dr_low.get_status = i386bsd_dr_get_status;
i386_set_debug_register_length (4);
#endif /* HAVE_PT_GETDBREGS */
I don't have FreeBSD 8.2 lying around, can you see if
PT_GETDBREGS is defined in /usr/include/sys/ptrace.h?