[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



>>> On 24.05.19 at 17:15, <andrew.cooper3@xxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.