If the BSS section is empty, then the function should return.
If one does not check whether the BSS section is empty or not, then there is a
risk of writing 0s outside of BSS section (which may contain critical data).
Fixes: dac84b66cc9a ("xen: arm64: initial build + config changes, start of day code")
Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Luca Fancellu <luca.fancellu@arm.com>
PRINT("- Zero BSS -\r\n")
mov_w r0, __bss_start /* r0 := vaddr(__bss_start) */
mov_w r1, __bss_end /* r1 := vaddr(__bss_end) */
+ cmp r1, r0
+ beq skip_bss
mov r2, #0
1: str r2, [r0], #4
cmp r0, r1
blo 1b
+skip_bss:
mov pc, lr
ENDPROC(zero_bss)
PRINT("- Zero BSS -\r\n")
ldr x0, =__bss_start /* x0 := vaddr(__bss_start) */
ldr x1, =__bss_end /* x1 := vaddr(__bss_end) */
+ cmp x1, x0
+ beq skip_bss
1: str xzr, [x0], #8
cmp x0, x1