36 lines
		
	
	
		
			574 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			574 B
		
	
	
	
		
			C++
		
	
	
namespace factor
 | 
						|
{
 | 
						|
 | 
						|
inline cell align_page(cell a)
 | 
						|
{
 | 
						|
	return align(a,getpagesize());
 | 
						|
}
 | 
						|
 | 
						|
/* segments set up guard pages to check for under/overflow.
 | 
						|
size must be a multiple of the page size */
 | 
						|
struct segment {
 | 
						|
	cell start;
 | 
						|
	cell size;
 | 
						|
	cell end;
 | 
						|
 | 
						|
	explicit segment(cell size, bool executable_p);
 | 
						|
	~segment();
 | 
						|
 | 
						|
	bool underflow_p(cell addr)
 | 
						|
	{
 | 
						|
		return (addr >= start - getpagesize() && addr < start);
 | 
						|
	}
 | 
						|
 | 
						|
	bool overflow_p(cell addr)
 | 
						|
	{
 | 
						|
		return (addr >= end && addr < end + getpagesize());
 | 
						|
	}
 | 
						|
 | 
						|
	bool in_segment_p(cell addr)
 | 
						|
	{
 | 
						|
		return (addr >= start && addr < end);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
}
 |