diff mbox series

[kvm-unit-tests,GIT,PULL,14/17] s390x: snippets: Define all things that are needed to link the libc

Message ID 20211018122635.53614-15-frankja@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests,GIT,PULL,01/17] s390x: uv-host: Explain why we set up the home space and remove the space change | expand

Commit Message

Janosch Frank Oct. 18, 2021, 12:26 p.m. UTC
From: Thomas Huth <thuth@redhat.com>

In the long run, we want to use parts of the libc like memset() etc.,
too. However, to be able to link it correctly, we have to provide
some stub functions like puts() and exit() to avoid that too much
other stuff from the lib folder gets pulled into the binaries, which
we cannot provide in the snippets (like the sclp support).

Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211008092649.959956-1-thuth@redhat.com>
Link: https://lore.kernel.org/kvm/20211008092649.959956-1-thuth@redhat.com/
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 s390x/Makefile            |  2 +-
 s390x/snippets/c/cstart.S | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/s390x/Makefile b/s390x/Makefile
index 5d1a33a0..d18b08b0 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -81,7 +81,7 @@  asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
 FLATLIBS = $(libcflat)
 
 SNIPPET_DIR = $(TEST_DIR)/snippets
-snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o
+snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o lib/auxinfo.o
 
 # perquisites (=guests) for the snippet hosts.
 # $(TEST_DIR)/<snippet-host>.elf: snippets = $(SNIPPET_DIR)/<c/asm>/<snippet>.gbin
diff --git a/s390x/snippets/c/cstart.S b/s390x/snippets/c/cstart.S
index 031a6b83..aaa5380c 100644
--- a/s390x/snippets/c/cstart.S
+++ b/s390x/snippets/c/cstart.S
@@ -20,6 +20,17 @@  start:
 	lghi	%r15, stackptr
 	sam64
 	brasl	%r14, main
+	/*
+	 * If main() returns, we stop the CPU with the code below. We also
+	 * route some functions that are required by the libc (but not usable
+	 * from snippets) to the CPU stop code below, so that snippets can
+	 * still be linked against the libc code (to use non-related functions
+	 * like memset() etc.)
+	 */
+.global puts
+.global exit
+puts:
+exit:
 	/* For now let's only use cpu 0 in snippets so this will always work. */
 	xgr	%r0, %r0
 	sigp    %r2, %r0, SIGP_STOP