aboutsummaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-10-31 16:11:43 +0000
committerPeter Maydell <peter.maydell@linaro.org>2018-10-31 16:11:43 +0000
commit7d51a855cd568ec3399a1834ada4023cfa12f231 (patch)
tree0b488686dcc7c5e90c21f0522cf38e9e8c55a98b /linux-user
parenta2e002ff7913ce93aa0f7dbedd2123dce5f1a9cd (diff)
parent5c76d652ab567a230f2ef0022b7ea5acb693e19c (diff)
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>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/flatload.c8
-rw-r--r--linux-user/xtensa/target_flat.h10
2 files changed, 14 insertions, 4 deletions
diff --git a/linux-user/flatload.c b/linux-user/flatload.c
index 10c529910f..0122ab3afe 100644
--- a/linux-user/flatload.c
+++ b/linux-user/flatload.c
@@ -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());
diff --git a/linux-user/xtensa/target_flat.h b/linux-user/xtensa/target_flat.h
new file mode 100644
index 0000000000..732adddb0d
--- /dev/null
+++ b/linux-user/xtensa/target_flat.h
@@ -0,0 +1,10 @@
+/* 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)