Commit 7d51a855 authored by Peter Maydell's avatar Peter Maydell
Browse files

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: default avatarPeter Maydell <peter.maydell@linaro.org>
parents a2e002ff 5c76d652
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7105,6 +7105,7 @@ case "$target_name" in
  ;;
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
    bflt="yes"
    mttcg="yes"
    target_compiler=$cross_cc_xtensa
  ;;
+4 −4
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@

#include "qemu.h"
#include "flat.h"
#include "target_flat.h"
#include <target_flat.h>

//#define DEBUG

@@ -771,10 +771,10 @@ int load_flt_binary(struct linux_binprm *bprm, struct image_info *info)
    /* Enforce final stack alignment of 16 bytes.  This is sufficient
       for all current targets, and excess alignment is harmless.  */
    stack_len = bprm->envc + bprm->argc + 2;
    stack_len += 3;	/* argc, arvg, argp */
    stack_len += flat_argvp_envp_on_stack() ? 2 : 0; /* arvg, argp */
    stack_len += 1; /* argc */
    stack_len *= sizeof(abi_ulong);
    if ((sp + stack_len) & 15)
        sp -= 16 - ((sp + stack_len) & 15);
    sp -= (sp - stack_len) & 15;
    sp = loader_build_argptr(bprm->envc, bprm->argc, sp, p,
                             flat_argvp_envp_on_stack());

+10 −0
Original line number Diff line number Diff line
/* If your arch needs to do custom stuff, create your own target_flat.h
 * header file in linux-user/<your arch>/
 */
#define flat_argvp_envp_on_stack()                           0
#define flat_reloc_valid(reloc, size)                        ((reloc) <= (size))
#define flat_old_ram_flag(flag)                              (flag)
#define flat_get_relocate_addr(relval)                       (relval)
#define flat_get_addr_from_rp(rp, relval, flags, persistent) (rp)
#define flat_set_persistent(relval, persistent)              (*persistent)
#define flat_put_addr_at_rp(rp, addr, relval)                put_user_ual(addr, rp)