require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&BOOT_ELF)) {
    sub BOOT_ELF () {	1;}
}
if(defined(&__sparc_v9__)) {
    eval 'sub ELFSIZE () {64;}' unless defined(&ELFSIZE);
} else {
    eval 'sub ELFSIZE () {32;}' unless defined(&ELFSIZE);
}
unless(defined(&LOAD_KERNEL)) {
    sub LOAD_KERNEL () {	 &LOAD_ALL;}
}
unless(defined(&COUNT_KERNEL)) {
    sub COUNT_KERNEL () {	 &COUNT_ALL;}
}
if(defined(&_STANDALONE)) {
    eval 'sub LOADADDR {
        my($a) = @_;
	    eval q(((($a) & 0xfffffff) +  &offset));
    }' unless defined(&LOADADDR);
    eval 'sub ALIGNENTRY {
        my($a) = @_;
	    eval q((($a)));
    }' unless defined(&ALIGNENTRY);
    eval 'sub READ {
        my($f, $b, $c) = @_;
	    eval q( &read(($f), ( &void *) &LOADADDR($b), ($c)));
    }' unless defined(&READ);
    eval 'sub BCOPY {
        my($s, $d, $c) = @_;
	    eval q( &memcpy(( &void *) &LOADADDR($d), ( &void *)($s), ($c)));
    }' unless defined(&BCOPY);
    eval 'sub BZERO {
        my($d, $c) = @_;
	    eval q( &memset(( &void *) &LOADADDR($d), 0, ($c)));
    }' unless defined(&BZERO);
    eval 'sub WARN {
        my($a) = @_;
	    eval q(( &void)( &printf $a,  &printf(( &errno ? \\": %s\\\\n\\" : \\"\\\\n\\"),  &strerror( &errno))));
    }' unless defined(&WARN);
    eval 'sub PROGRESS {
        my($a) = @_;
	    eval q(( &void)  &printf $a);
    }' unless defined(&PROGRESS);
    eval 'sub ALLOC {
        my($a) = @_;
	    eval q( &alloc($a));
    }' unless defined(&ALLOC);
    eval 'sub FREE {
        my($a, $b) = @_;
	    eval q( &free($a, $b));
    }' unless defined(&FREE);
    eval 'sub OKMAGIC {
        my($a) = @_;
	    eval q((($a) ==  &OMAGIC));
    }' unless defined(&OKMAGIC);
} else {
    eval 'sub LOADADDR {
        my($a) = @_;
	    eval q(((($a)) +  &offset));
    }' unless defined(&LOADADDR);
    eval 'sub ALIGNENTRY {
        my($a) = @_;
	    eval q((($a)));
    }' unless defined(&ALIGNENTRY);
    eval 'sub READ {
        my($f, $b, $c) = @_;
	    eval q( &read(($f), ( &void *) &LOADADDR($b), ($c)));
    }' unless defined(&READ);
    eval 'sub BCOPY {
        my($s, $d, $c) = @_;
	    eval q( &memcpy(( &void *) &LOADADDR($d), ( &void *)($s), ($c)));
    }' unless defined(&BCOPY);
    eval 'sub BZERO {
        my($d, $c) = @_;
	    eval q( &memset(( &void *) &LOADADDR($d), 0, ($c)));
    }' unless defined(&BZERO);
    eval 'sub WARN {
        my($a) = @_;
	    eval q( &warn $a);
    }' unless defined(&WARN);
    eval 'sub PROGRESS {
        my($a) = @_;
	    eval q();
    }' unless defined(&PROGRESS);
    eval 'sub ALLOC {
        my($a) = @_;
	    eval q( &malloc($a));
    }' unless defined(&ALLOC);
    eval 'sub FREE {
        my($a, $b) = @_;
	    eval q( &free($a));
    }' unless defined(&FREE);
    eval 'sub OKMAGIC {
        my($a) = @_;
	    eval q((($a) ==  &OMAGIC));
    }' unless defined(&OKMAGIC);
}
1;
