From cf74a3dbf95fc5d3b1b17df1c302ed525720c9c8 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 15 Mar 2018 17:01:33 +0100 Subject: [PATCH] x86emul: place test blobs in executable section This allows the section contents to be disassembled without going through any extra hoops, simplifying the analysis of problems in test and/or emulation code. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- tools/tests/x86_emulator/Makefile | 3 ++- tools/tests/x86_emulator/test_x86_emulator.c | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/tests/x86_emulator/Makefile b/tools/tests/x86_emulator/Makefile index c155f1217b..417d5c0941 100644 --- a/tools/tests/x86_emulator/Makefile +++ b/tools/tests/x86_emulator/Makefile @@ -91,7 +91,8 @@ $(addsuffix .h,$(TESTCASES)): %.h: %.c testcase.mk Makefile $(MAKE) -f testcase.mk TESTCASE=$* XEN_TARGET_ARCH=$(arch) $*-cflags="$$cflags" all; \ prefix=$(shell echo $(subst -,_,$*) | sed -e 's,^\([0-9]\),_\1,'); \ flavor=$$(echo $${cflags} | sed -e 's, .*,,' -e 'y,-=,__,') ; \ - (echo "static const unsigned int $${prefix}_$(arch)$${flavor}[] = {"; \ + (echo 'static const unsigned int __attribute__((section(".test, \"ax\", @progbits #")))' \ + "$${prefix}_$(arch)$${flavor}[] = {"; \ od -v -t x $*.bin | sed -e 's/^[0-9]* /0x/' -e 's/ /, 0x/g' -e 's/$$/,/'; \ echo "};") >>$@.new; \ rm -f $*.bin; \ diff --git a/tools/tests/x86_emulator/test_x86_emulator.c b/tools/tests/x86_emulator/test_x86_emulator.c index 7291a29fea..029a38d7fb 100644 --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -4,6 +4,9 @@ #include #include "x86-emulate.h" + +asm ( ".pushsection .test, \"ax\", @progbits; .popsection" ); + #include "blowfish.h" #include "3dnow.h" #include "sse.h" @@ -1142,9 +1145,9 @@ int main(int argc, char **argv) #define decl_insn(which) extern const unsigned char which[], \ which##_end[] asm ( ".L" #which "_end" ) -#define put_insn(which, insn) ".pushsection .test, \"ax\", @progbits\n" \ - #which ": " insn "\n" \ - ".L" #which "_end:\n" \ +#define put_insn(which, insn) ".pushsection .test\n" \ + #which ": " insn "\n" \ + ".L" #which "_end:\n" \ ".popsection" #define set_insn(which) (regs.eip = (unsigned long)(which)) #define valid_eip(which) (regs.eip >= (unsigned long)(which) && \ -- 2.39.5