Browse Source

Rework use of labels in assembly macros.

This patch provides a workaround for the ASM_ASSERT label issue
and also reworks the use of labels in assembly macros.
If the caller of the ASM_ASSERT macro happened to use the
label '1' to jump past the ASM_ASSERT macro, it would not have
worked since the ASM_ASSERT macro internally used the same label.
Hence, as a workaround, this patch makes the label a high
number in the expectation that the caller will never use it.

Also updated the other assembly macros using numerical labels to
named lables.

Change-Id: Iec892359db84f2391ad2a83a92141c4d7049776a
pull/192/head
Soby Mathew 10 years ago
parent
commit
aecc084080
  1. 4
      common/aarch64/debug.S
  2. 9
      include/common/assert_macros.S
  3. 10
      plat/fvp/include/plat_macros.S

4
common/aarch64/debug.S

@ -58,13 +58,13 @@ assert_msg2:
.macro asm_print_line_dec
mov x6, #10 /* Divide by 10 after every loop iteration */
mov x5, #MAX_DEC_DIVISOR
1:
dec_print_loop:
udiv x0, x4, x5 /* Get the quotient */
msub x4, x0, x5, x4 /* Find the remainder */
add x0, x0, #ASCII_OFFSET_NUM /* Convert to ascii */
bl plat_crash_console_putc
udiv x5, x5, x6 /* Reduce divisor */
cbnz x5, 1b
cbnz x5, dec_print_loop
.endm

9
include/common/assert_macros.S

@ -30,7 +30,10 @@
/*
* Assembler macro to enable asm_assert. Use this macro wherever
* assert is required in assembly.
* assert is required in assembly. Please note that the macro makes
* use of label '300' to provide the logic and the caller
* should make sure that this label is not used to branch prior
* to calling this macro.
*/
#define ASM_ASSERT(_cc) \
.ifndef .L_assert_filename ;\
@ -39,8 +42,8 @@
.string __FILE__ ;\
.popsection ;\
.endif ;\
b._cc 1f ;\
b._cc 300f ;\
adr x0, .L_assert_filename ;\
mov x1, __LINE__ ;\
b asm_assert ;\
1:
300:

10
plat/fvp/include/plat_macros.S

@ -52,7 +52,7 @@ spacer:
.macro plat_print_gic_regs
adr x0, plat_config
ldr w16, [x0, #CONFIG_GICC_BASE_OFFSET]
cbz x16, 1f
cbz x16, exit_print_gic_regs
/* gic base address is now in x16 */
adr x6, gic_regs /* Load the gic reg list to x6 */
/* Load the gic regs to gp regs used by str_in_crash_buf_print */
@ -66,10 +66,10 @@ spacer:
add x7, x16, #GICD_ISPENDR
adr x4, gicd_pend_reg
bl asm_print_str
2:
gicd_ispendr_loop:
sub x4, x7, x16
cmp x4, #0x280
b.eq 1f
b.eq exit_print_gic_regs
bl asm_print_hex
adr x4, spacer
bl asm_print_str
@ -77,8 +77,8 @@ spacer:
bl asm_print_hex
adr x4, newline
bl asm_print_str
b 2b
1:
b gicd_ispendr_loop
exit_print_gic_regs:
.endm
.section .rodata.cci_reg_name, "aS"

Loading…
Cancel
Save