require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_SYS_PSREF_H)) {
    eval 'sub _SYS_PSREF_H () {1;}' unless defined(&_SYS_PSREF_H);
    if(defined(&_KERNEL_OPT)) {
	require './sys/opt_psref_debug.ph';
    }
    require 'sys/types.ph';
    require 'sys/queue.ph';
    if(defined(&_KERNEL)) {
	if(defined(&PSREF_DEBUG)) {
	    eval 'sub PSREF_DEBUG_BARRIER () {
	        eval q( &psref_debug_barrier());
	    }' unless defined(&PSREF_DEBUG_BARRIER);
	    eval 'sub PSREF_DEBUG_INIT_LWP {
	        my($l) = @_;
    		eval q( &psref_debug_init_lwp(($l)));
	    }' unless defined(&PSREF_DEBUG_INIT_LWP);
	    eval 'sub PSREF_DEBUG_FILL_RETURN_ADDRESS0 {
	        my($psref, $addr) = @_;
    		eval q( &do { ($psref)-> &psref_debug = ($addr); }  &while (0));
	    }' unless defined(&PSREF_DEBUG_FILL_RETURN_ADDRESS0);
	    eval 'sub PSREF_DEBUG_FILL_RETURN_ADDRESS {
	        my($psref) = @_;
    		eval q( &do {  &PSREF_DEBUG_FILL_RETURN_ADDRESS0($psref,  &__builtin_return_address(0));}  &while (0));
	    }' unless defined(&PSREF_DEBUG_FILL_RETURN_ADDRESS);
	} else {
	    eval 'sub PSREF_DEBUG_BARRIER () {
	        eval q( &__nothing);
	    }' unless defined(&PSREF_DEBUG_BARRIER);
	    eval 'sub PSREF_DEBUG_INIT_LWP {
	        my($l) = @_;
    		eval q( &__nothing);
	    }' unless defined(&PSREF_DEBUG_INIT_LWP);
	    eval 'sub PSREF_DEBUG_FILL_RETURN_ADDRESS0 {
	        my($psref, $addr) = @_;
    		eval q( &__nothing);
	    }' unless defined(&PSREF_DEBUG_FILL_RETURN_ADDRESS0);
	    eval 'sub PSREF_DEBUG_FILL_RETURN_ADDRESS {
	        my($psref) = @_;
    		eval q( &__nothing);
	    }' unless defined(&PSREF_DEBUG_FILL_RETURN_ADDRESS);
	}
    }
}
1;
