On 21/06/2021 14.39, Janosch Frank wrote:
On 6/21/21 2:32 PM, Thomas Huth wrote:
On 21/06/2021 14.19, Janosch Frank wrote:
On 6/21/21 12:10 PM, Thomas Huth wrote:
On 20/05/2021 11.47, Janosch Frank wrote:
Snippets can be used to easily write and run guest (SIE) tests.
The snippet is linked into the test binaries and can therefore be
accessed via a ptr.
Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
---
.gitignore | 2 ++
s390x/Makefile | 28 ++++++++++++++++++---
s390x/snippets/c/cstart.S | 13 ++++++++++
s390x/snippets/c/flat.lds | 51 +++++++++++++++++++++++++++++++++++++++
4 files changed, 91 insertions(+), 3 deletions(-)
create mode 100644 s390x/snippets/c/cstart.S
create mode 100644 s390x/snippets/c/flat.lds
diff --git a/.gitignore b/.gitignore
index 784cb2dd..29d3635b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,5 @@ cscope.*
/api/dirty-log
/api/dirty-log-perf
/s390x/*.bin
+/s390x/snippets/*/*.bin
+/s390x/snippets/*/*.gbin
diff --git a/s390x/Makefile b/s390x/Makefile
index 8de926ab..fe267011 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -75,11 +75,33 @@ OBJDIRS += lib/s390x
asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
FLATLIBS = $(libcflat)
-%.elf: %.o $(FLATLIBS) $(SRCDIR)/s390x/flat.lds $(asmlib)
+
+SNIPPET_DIR = $(TEST_DIR)/snippets
+
+# C snippets that need to be linked
+snippets-c =
+
+# ASM snippets that are directly compiled and converted to a *.gbin
+snippets-a =
Could you please call this snippets-s instead of ...-a ? The -a suffix looks
like an archive to me otherwise.
Sure
+snippets = $(snippets-a)$(snippets-c)
Shouldn't there be a space between the two?
Yes, already fixed that a long while ago
I thought I had sent out a new version already, maybe that was an
illusion as I can't seem to find it right now.
+snippets-o += $(patsubst %.gbin,%.o,$(snippets))
+
+$(snippets-a): $(snippets-o) $(FLATLIBS)
+ $(OBJCOPY) -O binary $(patsubst %.gbin,%.o,$@) $@
+ $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $@ $@
+
+$(snippets-c): $(snippets-o) $(SNIPPET_DIR)/c/cstart.o $(FLATLIBS)
+ $(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds \
+ $(filter %.o, $^) $(FLATLIBS)
+ $(OBJCOPY) -O binary $@ $@
+ $(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $@ $@
+
+%.elf: $(snippets) %.o $(FLATLIBS) $(SRCDIR)/s390x/flat.lds $(asmlib)
$(CC) $(CFLAGS) -c -o $(@:.elf=.aux.o) \
$(SRCDIR)/lib/auxinfo.c -DPROGNAME=\"$@\"
$(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \
- $(filter %.o, $^) $(FLATLIBS) $(@:.elf=.aux.o)
+ $(filter %.o, $^) $(FLATLIBS) $(snippets) $(@:.elf=.aux.o)
Does this link the snippets into all elf files? ... wouldn't it be better to
restrict it somehow to the files that really need them?
Yes it does.
I'd like to avoid having to specify a makefile rule for every test that
uses snippets as we already have more than the mvpg one in the queue.
So I'm having Steffen looking into a solution for this problem. My first
idea was to bring the used snippets into the unittests.cfg but I
disliked that we then would have compile instructions in another file.
Maybe there's a way to include that into the makefile in a clever way?
I haven't tried, but maybe you could replace the $(snippets) in the last
line with
$(wildcard snippets/$@.gbin)
or something similar?
That starts falling apart when multiple tests use the same snippet, no?
That's true ... Maybe something like:
$(filter %.gbin,$^)
?
Thomas