From: Vladimir Serbinenko Date: Wed, 13 Nov 2013 00:04:56 +0000 (+0100) Subject: * include/grub/symbol.h (ADDR): New macro. Replace all occurences of X-Git-Tag: grub-2.02-beta1~362 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=286551b4ebac0b6807c42d2034181d508479c542;p=thirdparty%2Fgrub.git * include/grub/symbol.h (ADDR): New macro. Replace all occurences of =x with ADDR(x) in arm assembly. (END): New macro. Replace all .end with END. --- diff --git a/ChangeLog b/ChangeLog index 1af3d4b9b..35e498487 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-11-12 Vladimir Serbinenko + + * include/grub/symbol.h (ADDR): New macro. Replace all occurences of + =x with ADDR(x) in arm assembly. + (END): New macro. Replace all .end with END. + 2013-11-12 Vladimir Serbinenko Redirect all divisions to grub_divmod64. diff --git a/grub-core/kern/arm/cache.S b/grub-core/kern/arm/cache.S index 1f524e6d7..fba1c4f91 100644 --- a/grub-core/kern/arm/cache.S +++ b/grub-core/kern/arm/cache.S @@ -36,7 +36,7 @@ @ r1 - *end (exclusive) clean_dcache_range: @ Clean data cache for range to point-of-unification - ldr r2, =EXT_C(grub_arch_cache_dlinesz) + ldr r2, ADDR(EXT_C(grub_arch_cache_dlinesz)) ldr r2, [r2] sub r3, r2, #1 @ align "beg" to start of line mvn r3, r3 @@ -57,7 +57,7 @@ clean_dcache_range: @ r1 - *end (exclusive) invalidate_icache_range: @ Invalidate instruction cache for range to point-of-unification - ldr r2, =EXT_C(grub_arch_cache_ilinesz) + ldr r2, ADDR(EXT_C(grub_arch_cache_ilinesz)) ldr r2, [r2] sub r3, r2, #1 @ align "beg" to start of line mvn r3, r3 diff --git a/grub-core/kern/arm/misc.S b/grub-core/kern/arm/misc.S index 68e4828fd..94522c222 100644 --- a/grub-core/kern/arm/misc.S +++ b/grub-core/kern/arm/misc.S @@ -58,4 +58,4 @@ FUNCTION(raise) mov r0, #0 bx lr - .end + END diff --git a/grub-core/kern/arm/uboot/startup.S b/grub-core/kern/arm/uboot/startup.S index 256613674..8920c2add 100644 --- a/grub-core/kern/arm/uboot/startup.S +++ b/grub-core/kern/arm/uboot/startup.S @@ -60,22 +60,22 @@ FUNCTION(codestart) @ U-Boot API signature is stored on the U-Boot heap @ Stack pointer used as start address for signature probing mov r12, sp - ldr sp, =entry_state + ldr sp, ADDR(entry_state) push {r4-r12,lr} @ store U-Boot context (sp in r12) - ldr r12, =EXT_C(grub_uboot_machine_type) + ldr r12, ADDR(EXT_C(grub_uboot_machine_type)) str r1, [r12] - ldr r12, =EXT_C(grub_uboot_boot_data) + ldr r12, ADDR(EXT_C(grub_uboot_boot_data)) str r2, [r12] @ Modules have been stored as a blob in BSS, @ they need to be manually relocated to _end - ldr r0, =EXT_C(__bss_start) @ src + ldr r0, ADDR(EXT_C(__bss_start)) @ src add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) mvn r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) and r0, r0, r1 - ldr r1, =EXT_C(_end) @ dst = End of BSS + ldr r1, ADDR(EXT_C(_end)) @ dst = End of BSS ldr r2, grub_total_module_size @ blob size add r1, r1, #GRUB_KERNEL_MACHINE_STACK_SIZE @@ -83,7 +83,7 @@ FUNCTION(codestart) sub sp, r1, #8 add r1, r1, #1024 - ldr r12, =EXT_C(grub_modbase) + ldr r12, ADDR(EXT_C(grub_modbase)) str r1, [r12] add r1, r1, r2 @@ -98,14 +98,14 @@ FUNCTION(codestart) @ Since we _are_ the C run-time, we need to manually zero the BSS @ region before continuing - ldr r0, =EXT_C(__bss_start) @ zero from here + ldr r0, ADDR(EXT_C(__bss_start)) @ zero from here @ If unaligned, bytewise zero until base address aligned. mov r2, #0 1: tst r0, #3 beq 2f strb r2, [r0], #1 b 1b -2: ldr r1, =EXT_C(_end) @ to here +2: ldr r1, ADDR(EXT_C(_end)) @ to here 1: str r2, [r0], #4 cmp r0, r1 bne 1b @@ -120,21 +120,21 @@ FUNCTION(codestart) * U-Boot (Global Data Pointer) and preserve it for Grub. */ FUNCTION(grub_uboot_syscall) - ldr ip, =transition_space + ldr ip, ADDR(transition_space) stm ip, {r8, lr} - ldr ip, =gd_backup + ldr ip, ADDR(gd_backup) ldr r8, [ip] - ldr ip, =grub_uboot_syscall_ptr + ldr ip, ADDR(grub_uboot_syscall_ptr) mov lr, pc ldr pc, [ip] - ldr ip, =gd_backup + ldr ip, ADDR(gd_backup) str r8, [ip] - ldr ip, =transition_space + ldr ip, ADDR(transition_space) ldm ip, {r8, lr} bx lr FUNCTION(grub_uboot_return) - ldr sp, =entry_state_end + ldr sp, ADDR(entry_state_end) pop {r4-r12, lr} mov sp, r12 bx lr @@ -166,4 +166,4 @@ transition_space: VARIABLE(grub_uboot_syscall_ptr) .long 0 @ - .end + END diff --git a/include/grub/symbol.h b/include/grub/symbol.h index 8f54dd8b9..e31417549 100644 --- a/include/grub/symbol.h +++ b/include/grub/symbol.h @@ -37,6 +37,16 @@ # define EXT_C(sym) sym #endif +#ifdef __arm__ +#ifdef __clang__ +#define ADDR(x) x +#define END +#else +#define ADDR(x) =x +#define END .end +#endif +#endif + #if defined (__APPLE__) #define FUNCTION(x) .globl EXT_C(x) ; EXT_C(x): #define VARIABLE(x) .globl EXT_C(x) ; EXT_C(x):