[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 21/35] xen/arm32: head: Don't clobber r14/lr in the macro PRINT



On Mon, 22 Jul 2019, Julien Grall wrote:
> The current implementation of the macro PRINT will clobber r14/lr. This
> means the user should save r14 if it cares about it.
> 
> Follow-up patches will introduce more use of PRINT in places where lr
> should be preserved. Rather than requiring all the user to preserve lr,
> the macro PRINT is modified to save and restore it.
> 
> While the comment state r3 will be clobbered, this is not the case. So
> PRINT will use r3 to preserve lr.
> 
> Lastly, take the opportunity to move the comment on top of PRINT and use
> PRINT in init_uart. Both changes will be helpful in a follow-up patch.
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>

Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>


> ---
>     Changes in v2:
>         - Patch added
> ---
>  xen/arch/arm/arm32/head.S | 27 +++++++++++++++------------
>  1 file changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
> index 8b4c8a4714..b54331c19d 100644
> --- a/xen/arch/arm/arm32/head.S
> +++ b/xen/arch/arm/arm32/head.S
> @@ -64,15 +64,20 @@
>   *   r14 - LR
>   *   r15 - PC
>   */
> -/* Macro to print a string to the UART, if there is one.
> - * Clobbers r0-r3. */
>  #ifdef CONFIG_EARLY_PRINTK
> -#define PRINT(_s)       \
> -        adr   r0, 98f ; \
> -        bl    puts    ; \
> -        b     99f     ; \
> -98:     .asciz _s     ; \
> -        .align 2      ; \
> +/*
> + * Macro to print a string to the UART, if there is one.
> + *
> + * Clobbers r0 - r3
> + */
> +#define PRINT(_s)           \
> +        mov   r3, lr       ;\
> +        adr   r0, 98f      ;\
> +        bl    puts         ;\
> +        mov   lr, r3       ;\
> +        b     99f          ;\
> +98:     .asciz _s          ;\
> +        .align 2           ;\
>  99:
>  #else /* CONFIG_EARLY_PRINTK */
>  #define PRINT(s)
> @@ -500,10 +505,8 @@ init_uart:
>  #ifdef EARLY_PRINTK_INIT_UART
>          early_uart_init r11, r1, r2
>  #endif
> -        adr   r0, 1f
> -        b     puts                  /* Jump to puts */
> -1:      .asciz "- UART enabled -\r\n"
> -        .align 4
> +        PRINT("- UART enabled -\r\n")
> +        mov   pc, lr
>  
>  /*
>   * Print early debug messages.
> -- 
> 2.11.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.