diff options
author | Michael Brown <mcb30@etherboot.org> | 2008-11-18 16:37:15 -0800 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2008-11-19 19:14:24 +0000 |
commit | 849e4b12d62e87f11277916cea92573fc3eaab9a (patch) | |
tree | 51fe04c2bafbb51603944b338b9780decc2484f8 | |
parent | dc60c2414658f27b88f212bba8a36180ab8657fb (diff) | |
download | ipxe-849e4b12d62e87f11277916cea92573fc3eaab9a.tar.gz |
[libgcc] Make __libgcc architecture-specific
-rw-r--r-- | src/arch/i386/include/bits/compiler.h | 14 | ||||
-rw-r--r-- | src/libgcc/__divdi3.c | 2 | ||||
-rw-r--r-- | src/libgcc/__moddi3.c | 2 | ||||
-rw-r--r-- | src/libgcc/__udivdi3.c | 2 | ||||
-rw-r--r-- | src/libgcc/__udivmoddi4.c | 2 | ||||
-rw-r--r-- | src/libgcc/__umoddi3.c | 2 | ||||
-rw-r--r-- | src/libgcc/libgcc.h | 24 |
7 files changed, 25 insertions, 23 deletions
diff --git a/src/arch/i386/include/bits/compiler.h b/src/arch/i386/include/bits/compiler.h index af796069f..119a9a21d 100644 --- a/src/arch/i386/include/bits/compiler.h +++ b/src/arch/i386/include/bits/compiler.h @@ -6,6 +6,20 @@ /** Declare a function with standard calling conventions */ #define __asmcall __attribute__ (( cdecl, regparm(0) )) +/** + * 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. + */ +#define __libgcc __attribute__ (( cdecl )) + #endif /* ASSEMBLY */ #endif /* _BITS_COMPILER_H */ diff --git a/src/libgcc/__divdi3.c b/src/libgcc/__divdi3.c index 36f0b37fa..7097b11e1 100644 --- a/src/libgcc/__divdi3.c +++ b/src/libgcc/__divdi3.c @@ -4,7 +4,7 @@ #include "libgcc.h" -LIBGCC int64_t __divdi3(int64_t num, int64_t den) +__libgcc int64_t __divdi3(int64_t num, int64_t den) { int minus = 0; int64_t v; diff --git a/src/libgcc/__moddi3.c b/src/libgcc/__moddi3.c index eb7784b75..d671bbc4d 100644 --- a/src/libgcc/__moddi3.c +++ b/src/libgcc/__moddi3.c @@ -4,7 +4,7 @@ #include "libgcc.h" -LIBGCC int64_t __moddi3(int64_t num, int64_t den) +__libgcc int64_t __moddi3(int64_t num, int64_t den) { int minus = 0; int64_t v; diff --git a/src/libgcc/__udivdi3.c b/src/libgcc/__udivdi3.c index 9ae0c3dc0..f5a14de20 100644 --- a/src/libgcc/__udivdi3.c +++ b/src/libgcc/__udivdi3.c @@ -4,7 +4,7 @@ #include "libgcc.h" -LIBGCC uint64_t __udivdi3(uint64_t num, uint64_t den) +__libgcc uint64_t __udivdi3(uint64_t num, uint64_t den) { return __udivmoddi4(num, den, NULL); } diff --git a/src/libgcc/__udivmoddi4.c b/src/libgcc/__udivmoddi4.c index 59966edb4..21e0d51f9 100644 --- a/src/libgcc/__udivmoddi4.c +++ b/src/libgcc/__udivmoddi4.c @@ -1,6 +1,6 @@ #include "libgcc.h" -LIBGCC uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p) +__libgcc uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p) { uint64_t quot = 0, qbit = 1; diff --git a/src/libgcc/__umoddi3.c b/src/libgcc/__umoddi3.c index f6c76cb63..fb4da991c 100644 --- a/src/libgcc/__umoddi3.c +++ b/src/libgcc/__umoddi3.c @@ -4,7 +4,7 @@ #include "libgcc.h" -LIBGCC uint64_t __umoddi3(uint64_t num, uint64_t den) +__libgcc uint64_t __umoddi3(uint64_t num, uint64_t den) { uint64_t v; diff --git a/src/libgcc/libgcc.h b/src/libgcc/libgcc.h index 5b4a62444..d3e9bdd73 100644 --- a/src/libgcc/libgcc.h +++ b/src/libgcc/libgcc.h @@ -4,23 +4,11 @@ #include <stdint.h> #include <stddef.h> -/* - * 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. - * - */ -#define LIBGCC __attribute__ (( cdecl )) - -extern LIBGCC uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem); -extern LIBGCC uint64_t __udivdi3(uint64_t num, uint64_t den); -extern LIBGCC uint64_t __umoddi3(uint64_t num, uint64_t den); -extern LIBGCC int64_t __divdi3(int64_t num, int64_t den); -extern LIBGCC int64_t __moddi3(int64_t num, int64_t den); +extern __libgcc uint64_t __udivmoddi4 ( uint64_t num, uint64_t den, + uint64_t *rem ); +extern __libgcc uint64_t __udivdi3 (uint64_t num, uint64_t den ); +extern __libgcc uint64_t __umoddi3 ( uint64_t num, uint64_t den ); +extern __libgcc int64_t __divdi3 ( int64_t num, int64_t den ); +extern __libgcc int64_t __moddi3 ( int64_t num, int64_t den ); #endif /* _LIBGCC_H */ |