iPXE
Macros | Functions
compiler.h File Reference

Go to the source code of this file.

Macros

#define RELOC_TYPE_NONE   R_386_NONE
 Dummy relocation type. More...
 
#define ASM_NO_PREFIX   "c"
 Unprefixed constant operand modifier. More...
 
#define __asmcall   __attribute__ (( cdecl, regparm(0) ))
 Declare a function with standard calling conventions. More...
 
#define __libgcc   __attribute__ (( cdecl ))
 Declare a function with libgcc implicit linkage. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 

Macro Definition Documentation

◆ RELOC_TYPE_NONE

#define RELOC_TYPE_NONE   R_386_NONE

Dummy relocation type.

Definition at line 7 of file compiler.h.

◆ ASM_NO_PREFIX

#define ASM_NO_PREFIX   "c"

Unprefixed constant operand modifier.

Definition at line 12 of file compiler.h.

◆ __asmcall

#define __asmcall   __attribute__ (( cdecl, regparm(0) ))

Declare a function with standard calling conventions.

Definition at line 15 of file compiler.h.

◆ __libgcc

#define __libgcc   __attribute__ (( cdecl ))

Declare a function with libgcc implicit linkage.

It seems as though gcc expects its implicit arithmetic functions to be cdecl, even if -mrtd is specified. This is somewhat inconsistent; for example, if -mregparm=3 is used then the implicit functions do become regparm(3).

The implicit calls to memcpy() and memset() which gcc can generate do not seem to have this inconsistency; -mregparm and -mrtd affect them in the same way as any other function.

Update (25/4/14): it appears that more recent gcc versions do allow -mrtd to affect calls to the implicit arithmetic functions. There is nothing obvious in the gcc changelogs to indicate precisely when this happened. From experimentation with available gcc versions, the change occurred sometime between v4.6.3 and v4.7.2. We assume that only versions up to v4.6.x require the special treatment.

Definition at line 37 of file compiler.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )