qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

Merge remote-tracking branch 'remotes/xtensa/tags/20181030-xtensa' into staging

target/xtensa: support for bFLT binaries

- add support for bFLT binaries for target/xtensa
- fix per-architecture target_flat.h customization
- fix initial stack pointer for bFLT

# gpg: Signature made Tue 30 Oct 2018 18:27:42 GMT
# gpg: using RSA key 51F9CC91F83FA044
# gpg: Good signature from "Max Filippov <filippov@cadence.com>"
# gpg: aka "Max Filippov <max.filippov@cogentembedded.com>"
# gpg: aka "Max Filippov <jcmvbkbc@gmail.com>"
# Primary key fingerprint: 2B67 854B 98E5 327D CDEB 17D8 51F9 CC91 F83F A044

* remotes/xtensa/tags/20181030-xtensa:
linux-user/flatload: fix initial stack pointer alignment
linux-user: xtensa: enable bFLT support

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

+15 -4
+1
configure
··· 7105 7105 ;; 7106 7106 xtensa|xtensaeb) 7107 7107 TARGET_ARCH=xtensa 7108 + bflt="yes" 7108 7109 mttcg="yes" 7109 7110 target_compiler=$cross_cc_xtensa 7110 7111 ;;
+4 -4
linux-user/flatload.c
··· 37 37 38 38 #include "qemu.h" 39 39 #include "flat.h" 40 - #include "target_flat.h" 40 + #include <target_flat.h> 41 41 42 42 //#define DEBUG 43 43 ··· 771 771 /* Enforce final stack alignment of 16 bytes. This is sufficient 772 772 for all current targets, and excess alignment is harmless. */ 773 773 stack_len = bprm->envc + bprm->argc + 2; 774 - stack_len += 3; /* argc, arvg, argp */ 774 + stack_len += flat_argvp_envp_on_stack() ? 2 : 0; /* arvg, argp */ 775 + stack_len += 1; /* argc */ 775 776 stack_len *= sizeof(abi_ulong); 776 - if ((sp + stack_len) & 15) 777 - sp -= 16 - ((sp + stack_len) & 15); 777 + sp -= (sp - stack_len) & 15; 778 778 sp = loader_build_argptr(bprm->envc, bprm->argc, sp, p, 779 779 flat_argvp_envp_on_stack()); 780 780
+10
linux-user/xtensa/target_flat.h
··· 1 + /* If your arch needs to do custom stuff, create your own target_flat.h 2 + * header file in linux-user/<your arch>/ 3 + */ 4 + #define flat_argvp_envp_on_stack() 0 5 + #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) 6 + #define flat_old_ram_flag(flag) (flag) 7 + #define flat_get_relocate_addr(relval) (relval) 8 + #define flat_get_addr_from_rp(rp, relval, flags, persistent) (rp) 9 + #define flat_set_persistent(relval, persistent) (*persistent) 10 + #define flat_put_addr_at_rp(rp, addr, relval) put_user_ual(addr, rp)