| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  | namespace factor { | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  | inline cell align_page(cell a) { return align(a, getpagesize()); } | 
					
						
							| 
									
										
										
										
											2009-09-25 22:17:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* segments set up guard pages to check for under/overflow.
 | 
					
						
							|  |  |  | size must be a multiple of the page size */ | 
					
						
							| 
									
										
										
										
											2009-05-04 05:50:24 -04:00
										 |  |  | struct segment { | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   cell start; | 
					
						
							|  |  |  |   cell size; | 
					
						
							|  |  |  |   cell end; | 
					
						
							| 
									
										
										
										
											2009-09-25 22:17:20 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-12 21:48:38 -04:00
										 |  |  |   segment(cell size, bool executable_p); | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   ~segment(); | 
					
						
							| 
									
										
										
										
											2010-03-27 07:33:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   bool underflow_p(cell addr) { | 
					
						
							| 
									
										
										
										
											2015-08-14 18:06:59 -04:00
										 |  |  |     return addr >= (start - getpagesize()) && addr < start; | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2010-03-27 07:33:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   bool overflow_p(cell addr) { | 
					
						
							| 
									
										
										
										
											2015-08-14 18:06:59 -04:00
										 |  |  |     return addr >= end && addr < (end + getpagesize()); | 
					
						
							| 
									
										
										
										
											2013-05-11 22:28:18 -04:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2011-10-25 18:42:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 18:06:59 -04:00
										 |  |  |   bool in_segment_p(cell addr) { | 
					
						
							|  |  |  |     return addr >= start && addr < end; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void set_border_locked(bool locked); | 
					
						
							| 
									
										
										
										
											2009-05-04 02:00:30 -04:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | } |