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);
 | |
| 	}
 | |
| };
 | |
| 
 | |
| }
 |