err = pxe_call(PXENV_GET_CACHED_INFO, &bq_pkt);
if (err) {
printf("%s %04x\n", err_pxefailed, err);
- call16(kaboom, NULL, NULL);
+ kaboom();
}
return bq_pkt.buffersize;
if (!err) /* successed */
break;
- if (fr.status == PXENV_STATUS_TFTP_OPEN)
- continue;
- call16(kaboom, NULL, NULL);
+ if (fr.status != PXENV_STATUS_TFTP_OPEN)
+ kaboom();
}
file->tftp_bytesleft = fr.buffersize;
/* time runs out */
if (timeout == 0)
- call16(kaboom, NULL, NULL);
+ kaboom();
last_pkt = file->tftp_lastpkt;
last_pkt = ntohs(last_pkt); /* Host byte order */
uw_pkt.buffersize = 24;
pxe_call(PXENV_UDP_WRITE, &uw_pkt);
printf("TFTP server sent an incomprehesible reply\n");
- call16(kaboom, NULL, NULL);
+ kaboom();
failure:
timeout_ptr++;
return;
printf("Unable to locate configuration file\n");
- call16(kaboom, NULL, NULL);
+ kaboom();
}
/* Found nothing at all !! */
printf("%s\n", err_nopxe);
- call16(kaboom, NULL, NULL);
+ kaboom();
have_pxenv:
APIVer = pxenv->version;
if (err || uo_pkt.status) {
printf("%s", err_udpinit);
printf("%d\n", uo_pkt.status);
- call16(kaboom, NULL, NULL);
+ kaboom();
}
}
void __cdecl core_farcall(uint32_t, const com32sys_t *, com32sys_t *);
int __cdecl core_cfarcall(uint32_t, const void *, uint32_t);
+extern const com32sys_t zero_regs;
void call16(void (*)(void), const com32sys_t *, com32sys_t *);
/*
#define __bss16 __attribute((nocommon,section(".bss16")))
/*
+ * Death! The macro trick is to avoid symbol conflict with
+ * the real-mode symbol kaboom.
+ */
+__noreturn _kaboom(void);
+#define kaboom() _kaboom()
+
+/*
* externs for pxelinux
*/
-extern void kaboom(void);
extern void dns_mangle(void);
extern uint32_t ServerIP;