 fa59fc6eb4
			
		
	
	
		fa59fc6eb4
		
	
	
	
	
		
			
			Headers that will be shared between old includes and NetBSD-like includes are moved into common/include tree. They are still copied in /usr/include in 'make includes', so compilation and programs aren't be affected.
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Definitions for compiler-specific features. */
 | |
| 
 | |
| #ifndef _MINIX_COMPILER_H
 | |
| #define _MINIX_COMPILER_H
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *                          Compiler overrides                               *
 | |
|  *===========================================================================*/
 | |
| /* ACK */
 | |
| #ifdef __ACK__
 | |
| #include <minix/compiler-ack.h>
 | |
| #endif
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *                             Default values                                *
 | |
|  *===========================================================================*/
 | |
| /*
 | |
|  * cdecl calling convention expects the callee to pop the hidden pointer on
 | |
|  * struct return. For example, GCC and LLVM comply with this (tested on IA32).
 | |
|  */
 | |
| #ifndef BYTES_TO_POP_ON_STRUCT_RETURN
 | |
| #define BYTES_TO_POP_ON_STRUCT_RETURN $4
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * cdecl calling convention requires to push arguments on the stack in a 
 | |
|  * reverse order to easily support variadic arguments. Thus, instead of
 | |
|  * using the proper stdarg.h macros (that nowadays are
 | |
|  * compiler-dependant), it may be tempting to directly take the address of 
 | |
|  * the last argument and considering it as the start of an array. This is
 | |
|  * a shortcut that avoid looping to get all the arguments as the CPU
 | |
|  * already pushed them on the stack before the call to the function.
 | |
|  * 
 | |
|  * Unfortunately, such an assumption is strictly compiler-dependant and
 | |
|  * compilers are free to move the last argument on the stack, as a local
 | |
|  * variable, and return the address of the location where the argument was
 | |
|  * stored, if asked for. This will break things as the rest of the array's
 | |
|  * argument are stored elsewhere (typically, a couple of words above the
 | |
|  * location where the argument was stored).
 | |
|  *
 | |
|  * Conclusion: if unsure on what the compiler may do, do not make any 
 | |
|  * assumption and use the right (typically compiler-dependant) macros. 
 | |
|  */
 | |
| 
 | |
| #ifndef FUNC_ARGS_ARRAY
 | |
| #define FUNC_ARGS_ARRAY 0
 | |
| #endif
 | |
| 
 | |
| #endif /* _MINIX_COMPILER_H */
 |