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@xxxxxxxxxx> --- s390x/Makefile | 2 +- s390x/snippets/c/cstart.S | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/s390x/Makefile b/s390x/Makefile index ef8041a..b2a7c1f 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -80,7 +80,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 a175480..1862703 100644 --- a/s390x/snippets/c/cstart.S +++ b/s390x/snippets/c/cstart.S @@ -20,6 +20,17 @@ start: lghi %r15, 0x4000 - 160 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 -- 2.27.0