File:  [Qemu by Fabrice Bellard] / qemu / roms / ipxe / src / arch / i386 / include / setjmp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 18:58:23 2018 UTC (8 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu1101, qemu1001, qemu1000, qemu0151, HEAD
qemu 0.15.1

#ifndef ETHERBOOT_SETJMP_H
#define ETHERBOOT_SETJMP_H

FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>
#include <realmode.h>

/** A jump buffer */
typedef struct {
	uint32_t retaddr;
	uint32_t ebx;
	uint32_t esp;
	uint32_t ebp;
	uint32_t esi;
	uint32_t edi;
} jmp_buf[1];

/** A real-mode-extended jump buffer */
typedef struct {
	jmp_buf env;
	uint16_t rm_ss;
	uint16_t rm_sp;
} rmjmp_buf[1];

extern int __asmcall setjmp ( jmp_buf env );
extern void __asmcall longjmp ( jmp_buf env, int val );

#define rmsetjmp( _env ) ( {			\
	(_env)->rm_ss = rm_ss;			\
	(_env)->rm_sp = rm_sp;			\
	setjmp ( (_env)->env ); } )		\

#define rmlongjmp( _env, _val ) do {		\
	rm_ss = (_env)->rm_ss;			\
	rm_sp = (_env)->rm_sp;			\
	longjmp ( (_env)->env, (_val) );	\
	} while ( 0 )

#endif /* ETHERBOOT_SETJMP_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.