aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/i386/Makefile4
-rw-r--r--src/arch/i386/core/dumpregs.c2
-rw-r--r--src/arch/i386/core/gdbmach.c2
-rw-r--r--src/arch/i386/core/relocate.c2
-rw-r--r--src/arch/i386/include/bits/compiler.h11
-rw-r--r--src/arch/i386/include/pxe_call.h2
-rw-r--r--src/arch/i386/include/setjmp.h4
-rw-r--r--src/arch/i386/interface/pcbios/int13.c2
-rw-r--r--src/arch/i386/interface/pxe/pxe_call.c4
-rw-r--r--src/arch/i386/interface/syslinux/com32_call.c6
-rw-r--r--src/arch/i386/interface/syslinux/comboot_call.c6
-rw-r--r--src/core/main.c2
-rw-r--r--src/include/compiler.h5
-rw-r--r--src/include/stdlib.h2
14 files changed, 32 insertions, 22 deletions
diff --git a/src/arch/i386/Makefile b/src/arch/i386/Makefile
index 7d3e763..e376b48 100644
--- a/src/arch/i386/Makefile
+++ b/src/arch/i386/Makefile
@@ -22,11 +22,11 @@ endif
CFLAGS += -mpreferred-stack-boundary=2
# Code size reduction. Use regparm for all functions - C functions
-# called from assembly (or vice versa) need __cdecl now
+# called from assembly (or vice versa) need __asmcall now
#
CFLAGS += -mregparm=3
-# Code size reduction. Use -mrtd (same __cdecl requirements as above)
+# Code size reduction. Use -mrtd (same __asmcall requirements as above)
CFLAGS += -mrtd
# Code size reduction. This is the logical complement to -mregparm=3.
diff --git a/src/arch/i386/core/dumpregs.c b/src/arch/i386/core/dumpregs.c
index 89426d5..a2777a0 100644
--- a/src/arch/i386/core/dumpregs.c
+++ b/src/arch/i386/core/dumpregs.c
@@ -1,7 +1,7 @@
#include <stdio.h>
#include <realmode.h>
-void __cdecl _dump_regs ( struct i386_all_regs *ix86 ) {
+void __asmcall _dump_regs ( struct i386_all_regs *ix86 ) {
__asm__ __volatile__ (
TEXT16_CODE ( ".globl dump_regs\n\t"
diff --git a/src/arch/i386/core/gdbmach.c b/src/arch/i386/core/gdbmach.c
index d07663c..97827ec 100644
--- a/src/arch/i386/core/gdbmach.c
+++ b/src/arch/i386/core/gdbmach.c
@@ -142,7 +142,7 @@ static void gdbmach_enable_hwbps ( void ) {
__asm__ __volatile__ ( "movl %0, %%dr7\n" : : "r" ( dr7 ) );
}
-__cdecl void gdbmach_handler ( int signo, gdbreg_t *regs ) {
+__asmcall void gdbmach_handler ( int signo, gdbreg_t *regs ) {
gdbmach_disable_hwbps();
gdbstub_handler ( signo, regs );
gdbmach_enable_hwbps();
diff --git a/src/arch/i386/core/relocate.c b/src/arch/i386/core/relocate.c
index fd8df08..bdc8498 100644
--- a/src/arch/i386/core/relocate.c
+++ b/src/arch/i386/core/relocate.c
@@ -39,7 +39,7 @@ extern char _etextdata[];
* address space, and returns the physical address of the new location
* to the prefix in %edi.
*/
-__cdecl void relocate ( struct i386_all_regs *ix86 ) {
+__asmcall void relocate ( struct i386_all_regs *ix86 ) {
struct memory_map memmap;
unsigned long start, end, size, padded_size;
unsigned long new_start, new_end;
diff --git a/src/arch/i386/include/bits/compiler.h b/src/arch/i386/include/bits/compiler.h
new file mode 100644
index 0000000..af79606
--- /dev/null
+++ b/src/arch/i386/include/bits/compiler.h
@@ -0,0 +1,11 @@
+#ifndef _BITS_COMPILER_H
+#define _BITS_COMPILER_H
+
+#ifndef ASSEMBLY
+
+/** Declare a function with standard calling conventions */
+#define __asmcall __attribute__ (( cdecl, regparm(0) ))
+
+#endif /* ASSEMBLY */
+
+#endif /* _BITS_COMPILER_H */
diff --git a/src/arch/i386/include/pxe_call.h b/src/arch/i386/include/pxe_call.h
index 7a38d31..2f3ea15 100644
--- a/src/arch/i386/include/pxe_call.h
+++ b/src/arch/i386/include/pxe_call.h
@@ -30,6 +30,6 @@ extern void pxe_hook_int1a ( void );
extern int pxe_unhook_int1a ( void );
extern void pxe_init_structures ( void );
extern int pxe_start_nbp ( void );
-extern __cdecl void pxe_api_call ( struct i386_all_regs *ix86 );
+extern __asmcall void pxe_api_call ( struct i386_all_regs *ix86 );
#endif /* _PXE_CALL_H */
diff --git a/src/arch/i386/include/setjmp.h b/src/arch/i386/include/setjmp.h
index bb0a100..60e4b12 100644
--- a/src/arch/i386/include/setjmp.h
+++ b/src/arch/i386/include/setjmp.h
@@ -6,7 +6,7 @@
#define JBLEN 6
typedef unsigned long jmp_buf[JBLEN];
-extern int __cdecl setjmp (jmp_buf env);
-extern void __cdecl longjmp (jmp_buf env, int val);
+extern int __asmcall setjmp (jmp_buf env);
+extern void __asmcall longjmp (jmp_buf env, int val);
#endif /* ETHERBOOT_SETJMP_H */
diff --git a/src/arch/i386/interface/pcbios/int13.c b/src/arch/i386/interface/pcbios/int13.c
index 6f61e4a..a18039e 100644
--- a/src/arch/i386/interface/pcbios/int13.c
+++ b/src/arch/i386/interface/pcbios/int13.c
@@ -322,7 +322,7 @@ static int int13_get_extended_parameters ( struct int13_drive *drive,
* INT 13 handler
*
*/
-static __cdecl void int13 ( struct i386_all_regs *ix86 ) {
+static __asmcall void int13 ( struct i386_all_regs *ix86 ) {
int command = ix86->regs.ah;
unsigned int bios_drive = ix86->regs.dl;
struct int13_drive *drive;
diff --git a/src/arch/i386/interface/pxe/pxe_call.c b/src/arch/i386/interface/pxe/pxe_call.c
index 7122c4e..04aaf3b 100644
--- a/src/arch/i386/interface/pxe/pxe_call.c
+++ b/src/arch/i386/interface/pxe/pxe_call.c
@@ -119,7 +119,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
*/
-__cdecl void pxe_api_call ( struct i386_all_regs *ix86 ) {
+__asmcall 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;
@@ -339,7 +339,7 @@ __cdecl void pxe_api_call ( struct i386_all_regs *ix86 ) {
* @v es:di Address of PXE parameter block
* @ret ax PXE exit code
*/
-__cdecl void pxe_loader_call ( struct i386_all_regs *ix86 ) {
+__asmcall 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;
diff --git a/src/arch/i386/interface/syslinux/com32_call.c b/src/arch/i386/interface/syslinux/com32_call.c
index 586730c..4a782dc 100644
--- a/src/arch/i386/interface/syslinux/com32_call.c
+++ b/src/arch/i386/interface/syslinux/com32_call.c
@@ -41,7 +41,7 @@ uint16_t __bss16 ( com32_saved_sp );
/**
* Interrupt call helper
*/
-void __cdecl com32_intcall ( uint8_t interrupt, physaddr_t inregs_phys, physaddr_t outregs_phys ) {
+void __asmcall com32_intcall ( uint8_t interrupt, physaddr_t inregs_phys, physaddr_t outregs_phys ) {
memcpy_user ( virt_to_user( &com32_regs ), 0,
phys_to_user ( inregs_phys ), 0,
@@ -111,7 +111,7 @@ void __cdecl com32_intcall ( uint8_t interrupt, physaddr_t inregs_phys, physaddr
/**
* Farcall helper
*/
-void __cdecl com32_farcall ( uint32_t proc, physaddr_t inregs_phys, physaddr_t outregs_phys ) {
+void __asmcall com32_farcall ( uint32_t proc, physaddr_t inregs_phys, physaddr_t outregs_phys ) {
memcpy_user ( virt_to_user( &com32_regs ), 0,
phys_to_user ( inregs_phys ), 0,
@@ -170,7 +170,7 @@ void __cdecl com32_farcall ( uint32_t proc, physaddr_t inregs_phys, physaddr_t o
/**
* CDECL farcall helper
*/
-int __cdecl com32_cfarcall ( uint32_t proc, physaddr_t stack, size_t stacksz ) {
+int __asmcall com32_cfarcall ( uint32_t proc, physaddr_t stack, size_t stacksz ) {
int32_t eax;
copy_user_to_rm_stack ( phys_to_user ( stack ), stacksz );
diff --git a/src/arch/i386/interface/syslinux/comboot_call.c b/src/arch/i386/interface/syslinux/comboot_call.c
index 5a400ed..977d44f 100644
--- a/src/arch/i386/interface/syslinux/comboot_call.c
+++ b/src/arch/i386/interface/syslinux/comboot_call.c
@@ -212,7 +212,7 @@ void comboot_run_kernel ( )
/**
* Terminate program interrupt handler
*/
-static __cdecl void int20 ( struct i386_all_regs *ix86 __unused ) {
+static __asmcall void int20 ( struct i386_all_regs *ix86 __unused ) {
longjmp ( comboot_return, COMBOOT_RETURN_EXIT );
}
@@ -220,7 +220,7 @@ static __cdecl void int20 ( struct i386_all_regs *ix86 __unused ) {
/**
* DOS-compatible API
*/
-static __cdecl void int21 ( struct i386_all_regs *ix86 ) {
+static __asmcall void int21 ( struct i386_all_regs *ix86 ) {
ix86->flags |= CF;
switch ( ix86->regs.ah ) {
@@ -287,7 +287,7 @@ static __cdecl void int21 ( struct i386_all_regs *ix86 ) {
/**
* SYSLINUX API
*/
-static __cdecl void int22 ( struct i386_all_regs *ix86 ) {
+static __asmcall void int22 ( struct i386_all_regs *ix86 ) {
ix86->flags |= CF;
switch ( ix86->regs.ax ) {
diff --git a/src/core/main.c b/src/core/main.c
index aaf8111..120f87f 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -34,7 +34,7 @@ static struct feature features_end[0] __table_end ( struct feature, features );
*
* @ret rc Return status code
*/
-__cdecl int main ( void ) {
+__asmcall int main ( void ) {
struct feature *feature;
initialise();
diff --git a/src/include/compiler.h b/src/include/compiler.h
index b6a6f8e..4140a35 100644
--- a/src/include/compiler.h
+++ b/src/include/compiler.h
@@ -302,9 +302,6 @@ int __debug_disable;
/** 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 pure - i.e. without side effects
*/
@@ -372,4 +369,6 @@ int __debug_disable;
#endif /* ASSEMBLY */
+#include <bits/compiler.h>
+
#endif /* COMPILER_H */
diff --git a/src/include/stdlib.h b/src/include/stdlib.h
index f3dc7e4..838a22a 100644
--- a/src/include/stdlib.h
+++ b/src/include/stdlib.h
@@ -68,6 +68,6 @@ static inline void srand ( unsigned int seed ) {
*/
extern int system ( const char *command );
-extern __cdecl int main ( void );
+extern __asmcall int main ( void );
#endif /* STDLIB_H */