vmalloc   [plain text]


####################################################################
# This file defines probes for local features that vmalloc requires.
# Such probes are interpreted by the "iffe" language interpreter.
# Results are stored in the FEATURE directory.
# Written by Kiem-Phong Vo (08/15/95).
####################################################################

lib atexit
lib onexit
lib getpagesize
hdr stat
hdr stdlib
sys stat
typ ssize_t
hdr malloc
lib mallopt
lib mallinfo
lib mstats
hdr alloca

std	malloc note{ stuck with standard malloc }end noexecute{
	_BEGIN_EXTERNS_
	extern void _exit _ARG_((int));
	extern char* strdup _ARG_((const char*));
	#if _STD_
	char* malloc(unsigned n) { _exit(0); return 0; }
	#else
	char* malloc(n) unsigned n; { _exit(0); return 0; }
	#endif
	_END_EXTERNS_
	main() { strdup("yo"); _exit(1); }
}end

lib alloca note{ alloca exists }end compile{
	#if _hdr_alloca
	#include	<alloca.h>
	#endif
	main()
	{	alloca(10);
	}
}end

mal alloca note{ alloca is based on malloc() }end execute{
	#if _hdr_alloca
	#include	<alloca.h>
	#endif
	#if _STD_
	void* malloc(unsigned int size)
	#else
	void* malloc(size) unsigned int size;
	#endif
	{	exit(0);
		return 0;
	}
	main()
	{	alloca(10);
		return 1;
	}
}end

stk down note{ stack grows downward }end execute{
	static growdown()
	{	static char*	addr = 0;
		char		array[4];
		if(!addr)
		{	addr = &array[0];
			return growdown();
		}
		else if(addr < &array[0])
			return 0;
		else	return 1;	
	}
	main() { return growdown() ? 0 : 1; }
}end

exit    cleanup note{ stuck with standard _cleanup }end execute{
        #include <stdio.h>
        _BEGIN_EXTERNS_
        extern void exit _ARG_((int));
        extern void _exit _ARG_((int));
        extern void _cleanup();
        void _cleanup() { _exit(0); }
        _END_EXTERNS_
        main() { printf("cleanup\n"); exit(1); }
}end