diff mbox series

[kvm-unit-tests,v2,6/8] s390x: define a macro for the stack frame size

Message ID 20230119114045.34553-7-mhartmay@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series Some cleanup patches | expand

Commit Message

Marc Hartmayer Jan. 19, 2023, 11:40 a.m. UTC
Define and use a macro for the stack frame size.

Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
---
 lib/s390x/asm-offsets.c     | 1 +
 s390x/Makefile              | 2 +-
 s390x/cstart64.S            | 2 +-
 s390x/flat.lds.S            | 4 +++-
 s390x/gs.c                  | 5 +++--
 s390x/macros.S              | 4 ++--
 s390x/snippets/c/flat.lds.S | 6 ++++--
 7 files changed, 15 insertions(+), 9 deletions(-)

Comments

Nina Schoetterl-Glausch Feb. 1, 2023, 8:52 p.m. UTC | #1
On Thu, 2023-01-19 at 12:40 +0100, Marc Hartmayer wrote:
> Define and use a macro for the stack frame size.
> 
> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>

Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> ---
>  lib/s390x/asm-offsets.c     | 1 +
>  s390x/Makefile              | 2 +-
>  s390x/cstart64.S            | 2 +-
>  s390x/flat.lds.S            | 4 +++-
>  s390x/gs.c                  | 5 +++--
>  s390x/macros.S              | 4 ++--
>  s390x/snippets/c/flat.lds.S | 6 ++++--
>  7 files changed, 15 insertions(+), 9 deletions(-)
> 
[...]

> diff --git a/s390x/gs.c b/s390x/gs.c
> index 4993eb8f43a9..2c2b972d7e65 100644
> --- a/s390x/gs.c
> +++ b/s390x/gs.c
> @@ -9,6 +9,7 @@
>   *    Janosch Frank <frankja@linux.ibm.com>
>   */
>  #include <libcflat.h>
> +#include <asm/asm-offsets.h>
>  #include <asm/page.h>
>  #include <asm/facility.h>
>  #include <asm/interrupt.h>
> @@ -41,8 +42,8 @@ extern void gs_handler_asm(void);
>  	    "	    aghi    %r15,-320\n" 		/* Allocate stack frame */
One could argue that the macro should be used here also.
320 = stack_size + register_save_area + control_block
>  	    "	    stmg    %r0,%r13,192(%r15)\n" 	/* Store regs to save area */
>  	    "	    stg	    %r14,312(%r15)\n"
> -	    "	    la	    %r2,160(%r15)\n" 		/* Store gscb address in this_cb */
> -	    "	    .insn   rxy,0xe30000000049,0,160(%r15)\n" /* stgsc */
> +	    "	    la	    %r2," xstr(STACK_FRAME_SIZE) "(%r15) \n" 		/* Store gscb address in this_cb */
> +	    "	    .insn   rxy,0xe30000000049,0," xstr(STACK_FRAME_SIZE) "(%r15)\n" /* stgsc */

The comment indentation is a bit messed up now.

>  	    "	    lg	    %r14,24(%r2)\n" 		/* Get GSEPLA from GSCB*/
>  	    "	    lg	    %r14,40(%r14)\n" 		/* Get GSERA from GSEPL*/
>  	    "	    stg	    %r14,304(%r15)\n" 		/* Store GSERA in r14 of reg save area */

Nothing to do with your changes, but the whitespace in this asm block is pretty messy.
Have a look at the attached patch for some suggestion, but feel free to ignore them.

[...]
diff mbox series

Patch

diff --git a/lib/s390x/asm-offsets.c b/lib/s390x/asm-offsets.c
index f612f3277a95..188dd2e51181 100644
--- a/lib/s390x/asm-offsets.c
+++ b/lib/s390x/asm-offsets.c
@@ -87,6 +87,7 @@  int main(void)
 	OFFSET(STACK_FRAME_INT_GRS0, stack_frame_int, grs0);
 	OFFSET(STACK_FRAME_INT_GRS1, stack_frame_int, grs1);
 	DEFINE(STACK_FRAME_INT_SIZE, sizeof(struct stack_frame_int));
+	DEFINE(STACK_FRAME_SIZE, sizeof(struct stack_frame));
 
 	return 0;
 }
diff --git a/s390x/Makefile b/s390x/Makefile
index 44ccca8102d6..9a8e2af1b2be 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -159,7 +159,7 @@  $(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPP
 %.hdr.obj: %.hdr
 	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
 
-%.lds: %.lds.S
+%.lds: %.lds.S $(asm-offsets)
 	$(CPP) $(autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
 
 .SECONDEXPANSION:
diff --git a/s390x/cstart64.S b/s390x/cstart64.S
index 6f83da2a6c0a..468ace3ea4df 100644
--- a/s390x/cstart64.S
+++ b/s390x/cstart64.S
@@ -38,7 +38,7 @@  start:
 	/* setup stack */
 	larl	%r15, stackptr
 	/* Clear first stack frame */
-	xc      0(160,%r15), 0(%r15)
+	xc      0(STACK_FRAME_SIZE,%r15), 0(%r15)
 	/* setup initial PSW mask + control registers*/
 	larl	%r1, initial_psw
 	lpswe	0(%r1)
diff --git a/s390x/flat.lds.S b/s390x/flat.lds.S
index 952f6cd457ed..0cb7e383cc76 100644
--- a/s390x/flat.lds.S
+++ b/s390x/flat.lds.S
@@ -1,3 +1,5 @@ 
+#include <asm/asm-offsets.h>
+
 SECTIONS
 {
 	.lowcore : {
@@ -44,6 +46,6 @@  SECTIONS
 	/*
 	 * stackptr set with initial stack frame preallocated
 	 */
-	stackptr = . - 160;
+	stackptr = . - STACK_FRAME_SIZE;
 	stacktop = .;
 }
diff --git a/s390x/gs.c b/s390x/gs.c
index 4993eb8f43a9..2c2b972d7e65 100644
--- a/s390x/gs.c
+++ b/s390x/gs.c
@@ -9,6 +9,7 @@ 
  *    Janosch Frank <frankja@linux.ibm.com>
  */
 #include <libcflat.h>
+#include <asm/asm-offsets.h>
 #include <asm/page.h>
 #include <asm/facility.h>
 #include <asm/interrupt.h>
@@ -41,8 +42,8 @@  extern void gs_handler_asm(void);
 	    "	    aghi    %r15,-320\n" 		/* Allocate stack frame */
 	    "	    stmg    %r0,%r13,192(%r15)\n" 	/* Store regs to save area */
 	    "	    stg	    %r14,312(%r15)\n"
-	    "	    la	    %r2,160(%r15)\n" 		/* Store gscb address in this_cb */
-	    "	    .insn   rxy,0xe30000000049,0,160(%r15)\n" /* stgsc */
+	    "	    la	    %r2," xstr(STACK_FRAME_SIZE) "(%r15) \n" 		/* Store gscb address in this_cb */
+	    "	    .insn   rxy,0xe30000000049,0," xstr(STACK_FRAME_SIZE) "(%r15)\n" /* stgsc */
 	    "	    lg	    %r14,24(%r2)\n" 		/* Get GSEPLA from GSCB*/
 	    "	    lg	    %r14,40(%r14)\n" 		/* Get GSERA from GSEPL*/
 	    "	    stg	    %r14,304(%r15)\n" 		/* Store GSERA in r14 of reg save area */
diff --git a/s390x/macros.S b/s390x/macros.S
index 13cff299488f..e2a56a366c70 100644
--- a/s390x/macros.S
+++ b/s390x/macros.S
@@ -21,14 +21,14 @@ 
 	/* Save the stack address in GR2 which is the first function argument */
 	lgr     %r2, %r15
 	/* Allocate stack space for called C function, as specified in s390 ELF ABI */
-	slgfi   %r15, 160
+	slgfi   %r15, STACK_FRAME_SIZE
 	/*
 	 * Save the address of the interrupt stack into the back chain
 	 * of the called function.
 	 */
 	stg     %r2, STACK_FRAME_INT_BACKCHAIN(%r15)
 	brasl	%r14, \c_func
-	algfi   %r15, 160
+	algfi   %r15, STACK_FRAME_SIZE
 	RESTORE_REGS_STACK
 	lpswe	\old_psw
 	.endm
diff --git a/s390x/snippets/c/flat.lds.S b/s390x/snippets/c/flat.lds.S
index 9e5eb66bec23..468b5f1eebe8 100644
--- a/s390x/snippets/c/flat.lds.S
+++ b/s390x/snippets/c/flat.lds.S
@@ -1,3 +1,5 @@ 
+#include <asm/asm-offsets.h>
+
 SECTIONS
 {
 	.lowcore : {
@@ -18,9 +20,9 @@  SECTIONS
 	. = 0x4000;
 	/*
 	 * The stack grows down from 0x4000 to 0x2000, we pre-allocoate
-	 * a frame via the -160.
+	 * a frame via the -STACK_FRAME_SIZE.
 	 */
-	stackptr = . - 160;
+	stackptr = . - STACK_FRAME_SIZE;
 	stacktop = .;
 	/* Start text 0x4000 */
 	.text : {