require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_SYS_KCOV_H_)) {
    eval 'sub _SYS_KCOV_H_ () {1;}' unless defined(&_SYS_KCOV_H_);
    if(defined(&_KERNEL_OPT)) {
	require './sys/opt_kcov.ph';
    }
    require 'sys/param.ph';
    require 'sys/types.ph';
    require 'sys/atomic.ph';
    eval 'sub KCOV_IOC_SETBUFSIZE () { &_IOW(ord(\'K\'), 1,  &uint64_t);}' unless defined(&KCOV_IOC_SETBUFSIZE);
    eval 'sub KCOV_IOC_ENABLE () { &_IOW(ord(\'K\'), 2, \'int\');}' unless defined(&KCOV_IOC_ENABLE);
    eval 'sub KCOV_IOC_DISABLE () { &_IO(ord(\'K\'), 3);}' unless defined(&KCOV_IOC_DISABLE);
    eval 'sub KCOV_IOC_REMOTE_ATTACH () { &_IOW(ord(\'K\'), 10, \'struct kcov_ioc_remote_attach\');}' unless defined(&KCOV_IOC_REMOTE_ATTACH);
    eval 'sub KCOV_IOC_REMOTE_DETACH () { &_IO(ord(\'K\'), 11);}' unless defined(&KCOV_IOC_REMOTE_DETACH);
    eval 'sub KCOV_REMOTE_VHCI () {0;}' unless defined(&KCOV_REMOTE_VHCI);
    eval 'sub KCOV_REMOTE_VHCI_ID {
        my($bus, $port) = @_;
	    eval q(((( &uint64_t)$bus << 32) | (( &uint64_t)$port & 0xffffffff)));
    }' unless defined(&KCOV_REMOTE_VHCI_ID);
    eval 'sub KCOV_MODE_NONE () {0;}' unless defined(&KCOV_MODE_NONE);
    eval 'sub KCOV_MODE_TRACE_PC () {1;}' unless defined(&KCOV_MODE_TRACE_PC);
    eval 'sub KCOV_MODE_TRACE_CMP () {2;}' unless defined(&KCOV_MODE_TRACE_CMP);
    eval 'sub KCOV_ENTRY_SIZE () {$sizeof{ &kcov_int_t};}' unless defined(&KCOV_ENTRY_SIZE);
    if(defined(&_KERNEL)) {
	if(defined(&KCOV)) {
	} else {
	    eval 'sub kcov_remote_register {
	        my($s, $i) = @_;
    		eval q( &__nothing);
	    }' unless defined(&kcov_remote_register);
	    eval 'sub kcov_remote_enter {
	        my($s, $i) = @_;
    		eval q( &__nothing);
	    }' unless defined(&kcov_remote_enter);
	    eval 'sub kcov_remote_leave {
	        my($s, $i) = @_;
    		eval q( &__nothing);
	    }' unless defined(&kcov_remote_leave);
	    eval 'sub kcov_silence_enter () {
	        eval q( &__nothing);
	    }' unless defined(&kcov_silence_enter);
	    eval 'sub kcov_silence_leave () {
	        eval q( &__nothing);
	    }' unless defined(&kcov_silence_leave);
	    eval 'sub kcov_lwp_free {
	        my($a) = @_;
    		eval q( &__nothing);
	    }' unless defined(&kcov_lwp_free);
	}
    }
}
1;
