StdLib: Patches and updates for ARM.

Add ARMGCC and RVCT toolchain support.
Update and Add ARM specific machine headers.
Set the empty macro for __warn_references().
Make __flt_rounds() return 'Round to nearest' by default on ARM.

Signed-off-by:  Olivier Martin [olivier.martin@arm.com]
Reviewed-by:    darylm503


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12367 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
darylm503
2011-09-16 20:59:10 +00:00
parent 9c6595dca0
commit c614ca505d
17 changed files with 839 additions and 101 deletions

View File

@@ -17,59 +17,63 @@
#ifdef __GNUC__
#if __STDC__
#ifndef DONT_USE_STRONG_WEAK_ALIAS
#define __strong_alias(alias,sym) \
__asm(".global " _C_LABEL_STRING(#alias) "\n" \
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
#define __weak_alias(alias,sym) \
__asm(".weak " _C_LABEL_STRING(#alias) "\n" \
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
#ifndef DONT_USE_STRONG_WEAK_ALIAS
#define __strong_alias(alias,sym) \
__asm(".global " _C_LABEL_STRING(#alias) "\n" \
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
#define __weak_alias(alias,sym) \
__asm(".weak " _C_LABEL_STRING(#alias) "\n" \
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym) \
__asm(".weak " _C_LABEL_STRING(#sym));
/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym) \
__asm(".weak " _C_LABEL_STRING(#sym));
#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
#endif
#define __warn_references(sym,msg) \
__asm(".stabs \"" msg "\",30,0,0,0"); \
__asm(".stabs \"_" #sym "\",1,0,0,0");
#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define __strong_alias(alias,sym) /* NOTHING */
#define __weak_alias(alias,sym) /* NOTHING */
#define __weak_extern(sym) /* NOTHING */
#define __weak_reference(sym) /* NOTHING */
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
#endif
#define __warn_references(sym,msg) \
__asm(".stabs \"" msg "\",30,0,0,0"); \
__asm(".stabs \"_" #sym "\",1,0,0,0");
#else
#define __strong_alias(alias,sym) /* NOTHING */
#define __weak_alias(alias,sym) /* NOTHING */
#define __weak_extern(sym) /* NOTHING */
#define __weak_reference(sym) /* NOTHING */
#if !defined(__CC_ARM)
#define __warn_references(sym,msg) \
__asm(".stabs \"" msg "\",30,0,0,0"); \
__asm(".stabs \"_" #sym "\",1,0,0,0");
#else
#define __warn_references(sym,msg)
#endif
#else /* __STDC__ */
#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
#define ___weak_alias(alias,sym) \
__asm(".weak alias\nalias = sym");
/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym) ___weak_extern(_/**/sym)
#define ___weak_extern(sym) \
__asm(".weak sym");
#endif
#else /* __STDC__ */
#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
#define ___weak_alias(alias,sym) \
__asm(".weak alias\nalias = sym");
/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym) ___weak_extern(_/**/sym)
#define ___weak_extern(sym) \
__asm(".weak sym");
#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define ___weak_reference(sym) ; __asm(".weak sym");
#define __weak_reference(sym) ___weak_reference(_/**/sym)
#endif
#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define ___weak_reference(sym) ; __asm(".weak sym");
#define __weak_reference(sym) ___weak_reference(_/**/sym)
#endif
#define __warn_references(sym,msg) \
__asm(".stabs msg,30,0,0,0"); \
__asm(".stabs \"_/**/sym\",1,0,0,0");
#define __warn_references(sym,msg) \
__asm(".stabs msg,30,0,0,0"); \
__asm(".stabs \"_/**/sym\",1,0,0,0");
#endif /* __STDC__ */
#else /* __GNUC__ */
#define __warn_references(sym,msg)
#define __warn_references(sym,msg)
#endif /* __GNUC__ */
#if defined(__sh__) /* XXX SH COFF */