#ifndef BOCHS_H
#define BOCHS_H

/** @file
 *
 * bochs breakpoints
 *
 * This file defines @c bochsbp, the magic breakpoint instruction that
 * is incredibly useful when debugging under bochs.  This file should
 * never be included in production code.
 *
 * Use the pseudo-instruction @c bochsbp in assembly code, or the
 * bochsbp() function in C code.
 *
 */

#ifdef ASSEMBLY

/* Breakpoint for when debugging under bochs */
#define bochsbp xchgw %bx, %bx
#define BOCHSBP bochsbp

#else /* ASSEMBLY */

/** Breakpoint for when debugging under bochs */
static inline void bochsbp ( void ) {
	__asm__ __volatile__ ( "xchgw %bx, %bx" );
}

#endif /* ASSEMBLY */

#warning "bochs.h should not be included into production code"

#endif /* BOCHS_H */