mirror of https://github.com/ipxe/ipxe.git
[i386] Add check_bios_interrupts() debug function
Provide a debug function check_bios_interrupts() to look for changes to the interrupt vector table. This can be useful when investigating the behaviour (including crashes) of external PXE NBPs. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/43/head
parent
7d48affec2
commit
83c8f2e8e3
|
@ -29,5 +29,6 @@ extern void hook_bios_interrupt ( unsigned int interrupt, unsigned int handler,
|
||||||
extern int unhook_bios_interrupt ( unsigned int interrupt,
|
extern int unhook_bios_interrupt ( unsigned int interrupt,
|
||||||
unsigned int handler,
|
unsigned int handler,
|
||||||
struct segoff *chain_vector );
|
struct segoff *chain_vector );
|
||||||
|
extern void check_bios_interrupts ( void );
|
||||||
|
|
||||||
#endif /* BIOSINT_H */
|
#endif /* BIOSINT_H */
|
||||||
|
|
|
@ -90,3 +90,30 @@ int unhook_bios_interrupt ( unsigned int interrupt, unsigned int handler,
|
||||||
hooked_bios_interrupts--;
|
hooked_bios_interrupts--;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump changes to interrupt vector table (for debugging)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void check_bios_interrupts ( void ) {
|
||||||
|
static struct segoff vectors[256];
|
||||||
|
static uint8_t initialised;
|
||||||
|
struct segoff vector;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
/* Print any changed interrupt vectors */
|
||||||
|
for ( i = 0; i < ( sizeof ( vectors ) / sizeof ( vectors[0] ) ); i++ ) {
|
||||||
|
copy_from_real ( &vector, 0, ( i * sizeof ( vector ) ),
|
||||||
|
sizeof ( vector ) );
|
||||||
|
if ( memcmp ( &vector, &vectors[i], sizeof ( vector ) ) == 0 )
|
||||||
|
continue;
|
||||||
|
if ( initialised ) {
|
||||||
|
dbg_printf ( "INT %02x changed %04x:%04x => "
|
||||||
|
"%04x:%04x\n", i, vectors[i].segment,
|
||||||
|
vectors[i].offset, vector.segment,
|
||||||
|
vector.offset );
|
||||||
|
}
|
||||||
|
memcpy ( &vectors[i], &vector, sizeof ( vectors[i] ) );
|
||||||
|
}
|
||||||
|
initialised = 1;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue