diff options
author | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-12-15 00:58:34 +0000 |
---|---|---|
committer | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-12-15 00:58:34 +0000 |
commit | e7cb469e3aa3d5b05953a25f1ef40aea89d058c3 (patch) | |
tree | e0c5566224f5d00fc50873dbf2add9dc2856c7fa | |
parent | 5792e320d321b7330d9c59859b183e310a34b7a3 (diff) | |
download | edk2-platforms-e7cb469e3aa3d5b05953a25f1ef40aea89d058c3.tar.xz |
Fix issue with CodeSourcery gcc requiring assembly functions to have a .type define inorder to support interworking (calling from thumb(C code) to ARM code (hadn written assembly). We had to add a macro as the .type directive is not supported, or needed, by Xcode. All ARM .S files need to be updated.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11167 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | MdePkg/Include/Arm/ProcessorBind.h | 14 | ||||
-rw-r--r-- | MdePkg/Library/BaseCpuLib/Arm/CpuFlushTlb.S | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseCpuLib/Arm/CpuSleep.S | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/DisableInterrupts.S | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/EnableInterrupts.S | 1 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/GetInterruptsState.S | 5 | ||||
-rwxr-xr-x | MdePkg/Library/BaseLib/Arm/Math64.S | 26 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S | 3 |
9 files changed, 51 insertions, 2 deletions
diff --git a/MdePkg/Include/Arm/ProcessorBind.h b/MdePkg/Include/Arm/ProcessorBind.h index 810bf03be0..a68b30b811 100644 --- a/MdePkg/Include/Arm/ProcessorBind.h +++ b/MdePkg/Include/Arm/ProcessorBind.h @@ -110,6 +110,20 @@ typedef INT32 INTN; /// Define this macro to unify the usage.
///
#define ASM_GLOBAL .globl
+
+ #if !defined(__APPLE__)
+ ///
+ /// ARM EABI defines that the linker should not manipulate call relocations
+ /// (do bl/blx conversion) unless the target symbol has function type.
+ /// CodeSourcery 2010.09 started requiring the .type to function properly
+ ///
+ #define INTERWORK_FUNC(func__) .type ASM_PFX(func__), %function
+ #else
+ //
+ // .type not supported by Apple Xcode tools
+ //
+ #define INTERWORK_FUNC(func__)
+ #endif
#endif
/**
diff --git a/MdePkg/Library/BaseCpuLib/Arm/CpuFlushTlb.S b/MdePkg/Library/BaseCpuLib/Arm/CpuFlushTlb.S index 5ea90114be..46ef3e09f0 100644 --- a/MdePkg/Library/BaseCpuLib/Arm/CpuFlushTlb.S +++ b/MdePkg/Library/BaseCpuLib/Arm/CpuFlushTlb.S @@ -17,6 +17,7 @@ .text
.p2align 2
.globl ASM_PFX(CpuFlushTlb)
+INTERWORK_FUNC(CpuFlushTlb) #/**
# Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU.
diff --git a/MdePkg/Library/BaseCpuLib/Arm/CpuSleep.S b/MdePkg/Library/BaseCpuLib/Arm/CpuSleep.S index cf20b08762..ec2061a4b3 100644 --- a/MdePkg/Library/BaseCpuLib/Arm/CpuSleep.S +++ b/MdePkg/Library/BaseCpuLib/Arm/CpuSleep.S @@ -17,6 +17,7 @@ .text
.p2align 2
.globl ASM_PFX(CpuSleep)
+INTERWORK_FUNC(CpuSleep) #/**
# Places the CPU in a sleep state until an interrupt is received.
diff --git a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S index 43b747fb62..8ba3a439bd 100644 --- a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S +++ b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S @@ -17,6 +17,7 @@ .text
.p2align 2
.globl ASM_PFX(CpuBreakpoint)
+INTERWORK_FUNC(CpuBreakpoint) #/**
# Generates a breakpoint on the CPU.
diff --git a/MdePkg/Library/BaseLib/Arm/DisableInterrupts.S b/MdePkg/Library/BaseLib/Arm/DisableInterrupts.S index 338bd780aa..83db27a3fb 100644 --- a/MdePkg/Library/BaseLib/Arm/DisableInterrupts.S +++ b/MdePkg/Library/BaseLib/Arm/DisableInterrupts.S @@ -17,6 +17,7 @@ .text
.p2align 2
.globl ASM_PFX(DisableInterrupts)
+INTERWORK_FUNC(DisableInterrupts) #/**
# Disables CPU interrupts.
diff --git a/MdePkg/Library/BaseLib/Arm/EnableInterrupts.S b/MdePkg/Library/BaseLib/Arm/EnableInterrupts.S index 4fde6ec88e..f564927021 100644 --- a/MdePkg/Library/BaseLib/Arm/EnableInterrupts.S +++ b/MdePkg/Library/BaseLib/Arm/EnableInterrupts.S @@ -17,6 +17,7 @@ .text
.p2align 2
.globl ASM_PFX(EnableInterrupts)
+INTERWORK_FUNC(EnableInterrupts) #/**
diff --git a/MdePkg/Library/BaseLib/Arm/GetInterruptsState.S b/MdePkg/Library/BaseLib/Arm/GetInterruptsState.S index a7cd3c5cf2..95b3c5f07e 100644 --- a/MdePkg/Library/BaseLib/Arm/GetInterruptsState.S +++ b/MdePkg/Library/BaseLib/Arm/GetInterruptsState.S @@ -16,7 +16,8 @@ .text
.p2align 2
-.globl _GetInterruptState
+.globl ASM_PFX(GetInterruptState)
+INTERWORK_FUNC(GetInterruptState) #/**
# Retrieves the current CPU interrupt state.
@@ -35,7 +36,7 @@ # VOID
# );
#
-_GetInterruptState:
+ASM_PFX(GetInterruptState):
mrs R0, CPSR
tst R0, #0x80 @Check if IRQ is enabled.
moveq R0, #1
diff --git a/MdePkg/Library/BaseLib/Arm/Math64.S b/MdePkg/Library/BaseLib/Arm/Math64.S index d76fd5b42b..76a3c55160 100755 --- a/MdePkg/Library/BaseLib/Arm/Math64.S +++ b/MdePkg/Library/BaseLib/Arm/Math64.S @@ -20,6 +20,8 @@ .text .align 2 .globl ASM_PFX(InternalMathLShiftU64) + INTERWORK_FUNC(InternalMathLShiftU64) + ASM_PFX(InternalMathLShiftU64): stmfd sp!, {r4, r5, r6} mov r6, r1 @@ -37,6 +39,8 @@ ASM_PFX(InternalMathLShiftU64): .align 2 .globl ASM_PFX(InternalMathRShiftU64) + INTERWORK_FUNC(InternalMathRShiftU64) + ASM_PFX(InternalMathRShiftU64): stmfd sp!, {r4, r5, r6} mov r5, r0 @@ -54,6 +58,8 @@ ASM_PFX(InternalMathRShiftU64): .align 2 .globl ASM_PFX(InternalMathARShiftU64) + INTERWORK_FUNC(InternalMathARShiftU64) + ASM_PFX(InternalMathARShiftU64): stmfd sp!, {r4, r5, r6} mov r5, r0 @@ -71,6 +77,8 @@ ASM_PFX(InternalMathARShiftU64): .align 2 .globl ASM_PFX(InternalMathLRotU64) + INTERWORK_FUNC(InternalMathLRotU64) + ASM_PFX(InternalMathLRotU64): stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 @@ -96,6 +104,8 @@ ASM_PFX(InternalMathLRotU64): .align 2 .globl ASM_PFX(InternalMathRRotU64) + INTERWORK_FUNC(InternalMathRRotU64) + ASM_PFX(InternalMathRRotU64): stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 @@ -120,6 +130,8 @@ ASM_PFX(InternalMathRRotU64): .align 2 .globl ASM_PFX(InternalMathMultU64x32) + INTERWORK_FUNC(InternalMathMultU64x32) + ASM_PFX(InternalMathMultU64x32): stmfd sp!, {r7, lr} add r7, sp, #0 @@ -133,6 +145,8 @@ ASM_PFX(InternalMathMultU64x32): .align 2 .globl ASM_PFX(InternalMathMultU64x64) + INTERWORK_FUNC(InternalMathMultU64x64) + ASM_PFX(InternalMathMultU64x64): stmfd sp!, {r7, lr} add r7, sp, #0 @@ -145,6 +159,8 @@ ASM_PFX(InternalMathMultU64x64): .align 2 .globl ASM_PFX(InternalMathDivU64x32) + INTERWORK_FUNC(InternalMathDivU64x32) + ASM_PFX(InternalMathDivU64x32): stmfd sp!, {r7, lr} add r7, sp, #0 @@ -155,6 +171,8 @@ ASM_PFX(InternalMathDivU64x32): .align 2 .globl ASM_PFX(InternalMathModU64x32) + INTERWORK_FUNC(InternalMathModU64x32) + ASM_PFX(InternalMathModU64x32): stmfd sp!, {r7, lr} add r7, sp, #0 @@ -165,6 +183,8 @@ ASM_PFX(InternalMathModU64x32): .align 2 .globl ASM_PFX(InternalMathDivRemU64x32) + INTERWORK_FUNC(InternalMathDivRemU64x32) + ASM_PFX(InternalMathDivRemU64x32): stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 @@ -192,6 +212,8 @@ L22: .align 2 .globl ASM_PFX(InternalMathDivRemU64x64) + INTERWORK_FUNC(InternalMathDivRemU64x64) + ASM_PFX(InternalMathDivRemU64x64): stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 @@ -217,6 +239,8 @@ L26: .align 2 .globl ASM_PFX(InternalMathDivRemS64x64) + INTERWORK_FUNC(InternalMathDivRemS64x64) + ASM_PFX(InternalMathDivRemS64x64): stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 @@ -242,6 +266,8 @@ L30: .align 2 .globl ASM_PFX(InternalMathSwapBytes64) + INTERWORK_FUNC(InternalMathSwapBytes64) + ASM_PFX(InternalMathSwapBytes64): @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 diff --git a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S index a894cd7ee9..74bf07ed7c 100644 --- a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S +++ b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S @@ -15,7 +15,10 @@ .p2align 2
.globl ASM_PFX(SetJump)
+INTERWORK_FUNC(SetJump) +
.globl ASM_PFX(InternalLongJump)
+INTERWORK_FUNC(InternalLongJump) #/**
# Saves the current CPU context that can be restored with a call to LongJump() and returns 0.#
|