From: Jan Beulich Date: Thu, 15 Mar 2018 16:01:33 +0000 (+0100) Subject: x86emul: place test blobs in executable section X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~398 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cf74a3dbf95fc5d3b1b17df1c302ed525720c9c8;p=xen.git 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 --- 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) && \