Dear iPXE developers, I have noticed that undi_loader is defined both as a struct as well as a procedure:
src/arch/i386/drivers/net/undiload.c has static struct s_UNDI_LOADER __bss16 ( undi_loader ); while src/arch/i386/include/pxe.h (also include from the above file) has: extern PXENV_EXIT_t undi_loader ( struct s_UNDI_LOADER *undi_loader ); Presumably the compiler's name mangling (renaming the latter to, e.g., _undi_loader) will ensure this works in practice. But is that the intended set up? I would assume the following patch would avoid relying on such compiler internals: --- a/src/arch/i386/drivers/net/undiload.c +++ b/src/arch/i386/drivers/net/undiload.c @@ -45,8 +45,8 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define EUNDILOAD( status ) EPLATFORM ( EINFO_EUNDILOAD, status ) /** Parameter block for calling UNDI loader */ -static struct s_UNDI_LOADER __bss16 ( undi_loader ); -#define undi_loader __use_data16 ( undi_loader ) +static struct s_UNDI_LOADER __bss16 ( undi_loader_p ); +#define undi_loader __use_data16 ( undi_loader_p ) /** UNDI loader entry point */ static SEGOFF16_t __bss16 ( undi_loader_entry ); Thanks a lot, Michael _______________________________________________ ipxe-devel mailing list ipxe-devel@lists.ipxe.org https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel