Skip to content

Commit

Permalink
Applied a modified version of holger's regparm patches.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Brown committed Jul 28, 2007
1 parent e3484e2 commit a6a1052
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 5 deletions.
12 changes: 12 additions & 0 deletions src/arch/i386/Config
Expand Up @@ -130,6 +130,18 @@ endif
# this is almost always a win. the kernel uses it, too.
CFLAGS+= -mpreferred-stack-boundary=2

# use regparm for all functions - C functions called from assembly (or
# vice versa) need __cdecl now
CFLAGS+= -mregparm=3

# use -mrtd (same __cdecl requirements as above)
CFLAGS+= -mrtd

# this is the logical complement to -mregparm=3.
# it doesn't currently buy us anything, but if anything ever tries
# to return small structures, let's be prepared
CFLAGS+= -freg-struct-return

LDFLAGS+= -N --no-check-sections

ifeq "$(shell uname -s)" "FreeBSD"
Expand Down
2 changes: 1 addition & 1 deletion src/arch/i386/core/relocate.c
Expand Up @@ -39,7 +39,7 @@ extern char _end[];
* address space, and returns the physical address of the new location
* to the prefix in %edi.
*/
void relocate ( struct i386_all_regs *ix86 ) {
__cdecl void relocate ( struct i386_all_regs *ix86 ) {
struct memory_map memmap;
unsigned long start, end, size, padded_size;
unsigned long new_start, new_end;
Expand Down
2 changes: 1 addition & 1 deletion src/arch/i386/interface/pcbios/int13.c
Expand Up @@ -321,7 +321,7 @@ static int int13_get_extended_parameters ( struct int13_drive *drive,
* INT 13 handler
*
*/
static void int13 ( struct i386_all_regs *ix86 ) {
static __cdecl void int13 ( struct i386_all_regs *ix86 ) {
int command = ix86->regs.ah;
unsigned int bios_drive = ix86->regs.dl;
unsigned int original_bios_drive = bios_drive;
Expand Down
4 changes: 2 additions & 2 deletions src/arch/i386/interface/pxe/pxe_call.c
Expand Up @@ -112,7 +112,7 @@ static PXENV_EXIT_t pxenv_unknown ( struct s_PXENV_UNKNOWN *pxenv_unknown ) {
* @v es:di Address of PXE parameter block
* @ret ax PXE exit code
*/
void pxe_api_call ( struct i386_all_regs *ix86 ) {
__cdecl void pxe_api_call ( struct i386_all_regs *ix86 ) {
int opcode = ix86->regs.bx;
userptr_t parameters = real_to_user ( ix86->segs.es, ix86->regs.di );
size_t param_len;
Expand Down Expand Up @@ -304,7 +304,7 @@ void pxe_api_call ( struct i386_all_regs *ix86 ) {
* @v es:di Address of PXE parameter block
* @ret ax PXE exit code
*/
void pxe_loader_call ( struct i386_all_regs *ix86 ) {
__cdecl void pxe_loader_call ( struct i386_all_regs *ix86 ) {
userptr_t uparams = real_to_user ( ix86->segs.es, ix86->regs.di );
struct s_UNDI_LOADER params;
PXENV_EXIT_t ret;
Expand Down
2 changes: 1 addition & 1 deletion src/core/main.c
Expand Up @@ -24,7 +24,7 @@ Literature dealing with the network protocols:
*
* @ret rc Return status code
*/
int main ( void ) {
__cdecl int main ( void ) {

initialise();
startup();
Expand Down
3 changes: 3 additions & 0 deletions src/include/compiler.h
Expand Up @@ -276,6 +276,9 @@ extern void dbg_hex_dump_da ( unsigned long dispaddr,
/** Declare a variable or data structure as unused. */
#define __unused __attribute__ (( unused ))

/** Apply standard C calling conventions */
#define __cdecl __attribute__ (( cdecl , regparm(0) ))

/**
* Declare a function as used.
*
Expand Down

0 comments on commit a6a1052

Please sign in to comment.