Take the printf implementation in cp15 guest and make it available to all guests that might want to use it. --- tools/testing/selftests/kvm/arm/Makefile | 7 ++-- tools/testing/selftests/kvm/arm/cp15-guest.c | 44 ------------------------- tools/testing/selftests/kvm/arm/guest-util.c | 45 ++++++++++++++++++++++++++ tools/testing/selftests/kvm/arm/guest-util.h | 8 +++++ tools/testing/selftests/kvm/arm/guest.h | 1 + 5 files changed, 59 insertions(+), 46 deletions(-) create mode 100644 tools/testing/selftests/kvm/arm/guest-util.c create mode 100644 tools/testing/selftests/kvm/arm/guest-util.h diff --git a/tools/testing/selftests/kvm/arm/Makefile b/tools/testing/selftests/kvm/arm/Makefile index 4f6d6be..85490f7 100644 --- a/tools/testing/selftests/kvm/arm/Makefile +++ b/tools/testing/selftests/kvm/arm/Makefile @@ -43,11 +43,14 @@ guest-driver: $(DRIVER_OBJS) guest-base.o: guest-base.S $(GCC) $(CFLAGS) -fno-builtin -ffreestanding -c -o $@ $< +guest-util.o: guest-util.c + $(GCC) $(CFLAGS) $(CFLAGS_$@) -fno-builtin -ffreestanding -c -o $@ $< + %-guest.o: %-guest.c $(GCC) $(CFLAGS) $(CFLAGS_$@) -fno-builtin -ffreestanding -c -o $@ $< -%-guest: %-guest.o guest.lds guest-base.o - $(LD) -o $@ --script=guest.lds $< guest-base.o +%-guest: %-guest.o guest.lds guest-base.o guest-util.o + $(LD) -o $@ --script=guest.lds $< guest-base.o guest-util.o %-host.o: %-host.c $(GCC) $(CFLAGS) $(CFLAGS_$@) -c -o $@ $< diff --git a/tools/testing/selftests/kvm/arm/cp15-guest.c b/tools/testing/selftests/kvm/arm/cp15-guest.c index b83b747..9652183 100644 --- a/tools/testing/selftests/kvm/arm/cp15-guest.c +++ b/tools/testing/selftests/kvm/arm/cp15-guest.c @@ -1,5 +1,4 @@ #include "guest.h" -#include <stdarg.h> #include "cp15_test.h" /* Don't test things we know fail. */ @@ -18,49 +17,6 @@ struct test32 { extern u32 mcr_insn, mrc_insn, mcrr_insn, mrrc_insn; -/* Only understands %u, %s */ -static void printf(const char *fmt, ...) -{ - va_list ap; - unsigned val; - char intbuf[20], *p; - - va_start(ap, fmt); - while (*fmt) { - if (*fmt != '%') { - putc(*(fmt++)); - continue; - } - fmt++; - switch (*fmt) { - case 'u': - fmt++; - val = va_arg(ap, int); - if (!val) { - putc('0'); - continue; - } - p = &intbuf[19]; - *(p--) = '\0'; - while (val) { - *(p--) = (val % 10) + '0'; - val /= 10; - } - print(p+1); - break; - case 's': - fmt++; - p = va_arg(ap, char *); - print(p); - break; - default: - putc('%'); - continue; - } - } - va_end(ap); -} - /* Alter mcr or mrc instruction */ static void alter_insn32(u32 *insn, unsigned int opc1, diff --git a/tools/testing/selftests/kvm/arm/guest-util.c b/tools/testing/selftests/kvm/arm/guest-util.c new file mode 100644 index 0000000..e51cdd4 --- /dev/null +++ b/tools/testing/selftests/kvm/arm/guest-util.c @@ -0,0 +1,45 @@ +#include <stdarg.h> +#include "guest-util.h" + +/* Only understands %u, %s */ +void printf(const char *fmt, ...) +{ + va_list ap; + unsigned val; + char intbuf[20], *p; + + va_start(ap, fmt); + while (*fmt) { + if (*fmt != '%') { + putc(*(fmt++)); + continue; + } + fmt++; + switch (*fmt) { + case 'u': + fmt++; + val = va_arg(ap, int); + if (!val) { + putc('0'); + continue; + } + p = &intbuf[19]; + *(p--) = '\0'; + while (val) { + *(p--) = (val % 10) + '0'; + val /= 10; + } + print(p+1); + break; + case 's': + fmt++; + p = va_arg(ap, char *); + print(p); + break; + default: + putc('%'); + continue; + } + } + va_end(ap); +} diff --git a/tools/testing/selftests/kvm/arm/guest-util.h b/tools/testing/selftests/kvm/arm/guest-util.h new file mode 100644 index 0000000..7f0dbf9 --- /dev/null +++ b/tools/testing/selftests/kvm/arm/guest-util.h @@ -0,0 +1,8 @@ +#ifndef GUEST_UTIL_H +#define GUEST_UTIL_H +#include <stdarg.h> +#include "guest.h" + +void printf(const char *fmt, ...); + +#endif /* GUEST_UTIL_H */ diff --git a/tools/testing/selftests/kvm/arm/guest.h b/tools/testing/selftests/kvm/arm/guest.h index b6068d0..4fe3a31 100644 --- a/tools/testing/selftests/kvm/arm/guest.h +++ b/tools/testing/selftests/kvm/arm/guest.h @@ -2,6 +2,7 @@ #define GUEST_H #include <stdint.h> #include <stdbool.h> +#include "guest-util.h" void ok(void); void fail(void); -- 1.7.9.5 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm