[Xen-devel] [PATCH] tests/x86emul: Annotate test blobs as executable code

Andrew Cooper posted 1 patch 4 years, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/xen tags/patchew/1558710904-8210-1-git-send-email-andrew.cooper3@citrix.com
tools/tests/x86_emulator/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[Xen-devel] [PATCH] tests/x86emul: Annotate test blobs as executable code
Posted by Andrew Cooper 4 years, 11 months ago
This causes objdump to disassemble them, rather than rendering them as
straight hex data.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
---
 tools/tests/x86_emulator/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/tests/x86_emulator/Makefile b/tools/tests/x86_emulator/Makefile
index 970ec3e..b54603d 100644
--- a/tools/tests/x86_emulator/Makefile
+++ b/tools/tests/x86_emulator/Makefile
@@ -149,7 +149,7 @@ $(addsuffix .h,$(TESTCASES)): %.h: %.c testcase.mk Makefile
 		(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; \
+		 echo "}; asm(\".type $${prefix}_$(arch)$${flavor}, STT_FUNC;\");") >>$@.new; \
 		rm -f $*.bin; \
 	    done; \
 	)
@@ -165,7 +165,7 @@ $(addsuffix -opmask.h,$(OPMASK)): %.h: opmask.S testcase.mk Makefile
 		(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; \
+		 echo "}; asm(\".type $${prefix}_$(arch)$${flavor}, STT_FUNC;\");") >>$@.new; \
 		rm -f $*.bin; \
 	    done; \
 	)
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH] tests/x86emul: Annotate test blobs as executable code
Posted by Jan Beulich 4 years, 11 months ago
>>> On 24.05.19 at 17:15, <andrew.cooper3@citrix.com> wrote:
> --- a/tools/tests/x86_emulator/Makefile
> +++ b/tools/tests/x86_emulator/Makefile
> @@ -149,7 +149,7 @@ $(addsuffix .h,$(TESTCASES)): %.h: %.c testcase.mk Makefile
>  		(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; \
> +		 echo "}; asm(\".type $${prefix}_$(arch)$${flavor}, STT_FUNC;\");") >>$@.new; \

Hmm, this seems risky to me - I'd expect a decent compiler to mark
them as STT_OBJECT, and a decent assembler to choke on finding
disagreeing .type directives for the same symbol. Current binutils
looks to simply OR together all the values, and then decide in an
adhoc sequence which type to actually emit:

      if ((flags & BSF_THREAD_LOCAL) != 0)
	type = STT_TLS;
      else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
	type = STT_GNU_IFUNC;
      else if ((flags & BSF_FUNCTION) != 0)
	type = STT_FUNC;
      else if ((flags & BSF_OBJECT) != 0)
	type = STT_OBJECT;
      else if ((flags & BSF_RELC) != 0)
	type = STT_RELC;
      else if ((flags & BSF_SRELC) != 0)
	type = STT_SRELC;
      else
	type = STT_NOTYPE;

I don't think that's sane behavior (albeit it guarantees @function to
win over @object), and hence I'd say it can change at any time.

I wanted to suggest forcing the type change via objcopy, but to
my surprise I couldn't find a respective option.

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel