Message ID | 20190722213958.5761-22-julien.grall@arm.com |
---|---|
State | Superseded |
Headers | show |
Series | xen/arm: Rework head.S to make it more compliant with the Arm Arm | expand |
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@arm.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > 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 >
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.
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@arm.com> --- Changes in v2: - Patch added --- xen/arch/arm/arm32/head.S | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)