From: riku voipio <riku.voipio@iki.fi>
To: Mike Frysinger <vapier@gentoo.org>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] linux-user/FLAT: allow targets to override FLAT reloc processing
Date: Wed, 26 Jan 2011 23:21:04 +0200 [thread overview]
Message-ID: <4D409040.6020504@iki.fi> (raw)
In-Reply-To: <1295862517-6668-1-git-send-email-vapier@gentoo.org>
On 01/24/2011 11:48 AM, Mike Frysinger wrote:
> This brings flatload.c more in line with the current Linux FLAT loader
> which allows targets to handle FLAT relocations in their own way. For
> the common behavior, the new functions get stubbed out.
Do you have some instructions howto build flat binaries for testing? I
have to admit my knowledge of flat binaries is quite nonexisting.
Riku
> Signed-off-by: Mike Frysinger<vapier@gentoo.org>
> ---
> Makefile.target | 2 +-
> linux-user/flatload.c | 24 +++++++++---------------
> linux-user/target_flat.h | 9 +++++++++
> 3 files changed, 19 insertions(+), 16 deletions(-)
> create mode 100644 linux-user/target_flat.h
>
> diff --git a/Makefile.target b/Makefile.target
> index cd2abde..282428b 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -107,7 +107,7 @@ ifdef CONFIG_LINUX_USER
>
> $(call set-vpath, $(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR))
>
> -QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
> +QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user
> obj-y = main.o syscall.o strace.o mmap.o signal.o thunk.o \
> elfload.o linuxload.o uaccess.o gdbstub.o cpu-uname.o \
> qemu-malloc.o $(oslib-obj-y)
> diff --git a/linux-user/flatload.c b/linux-user/flatload.c
> index d8b4476..c133732 100644
> --- a/linux-user/flatload.c
> +++ b/linux-user/flatload.c
> @@ -41,6 +41,8 @@
>
> #include "qemu.h"
> #include "flat.h"
> +#define ntohl(x) be32_to_cpu(x)
> +#include<target_flat.h>
>
> //#define DEBUG
>
> @@ -50,14 +52,6 @@
> #define DBG_FLT(...)
> #endif
>
> -#define flat_reloc_valid(reloc, size) ((reloc)<= (size))
> -#define flat_old_ram_flag(flag) (flag)
> -#ifdef TARGET_WORDS_BIGENDIAN
> -#define flat_get_relocate_addr(relval) (relval)
> -#else
> -#define flat_get_relocate_addr(relval) bswap32(relval)
> -#endif
> -
> #define RELOC_FAILED 0xff00ff01 /* Relocation incorrect somewhere */
> #define UNLOADED_LIB 0x7ff000ff /* Placeholder for unused library */
>
> @@ -78,8 +72,6 @@ static int load_flat_shared_library(int id, struct lib_info *p);
>
> struct linux_binprm;
>
> -#define ntohl(x) be32_to_cpu(x)
> -
> /****************************************************************************/
> /*
> * create_flat_tables() parses the env- and arg-strings in new user
> @@ -625,6 +617,7 @@ static int load_flat_file(struct linux_binprm * bprm,
> * __start to address 4 so that is okay).
> */
> if (rev> OLD_FLAT_VERSION) {
> + abi_ulong persistent = 0;
> for (i = 0; i< relocs; i++) {
> abi_ulong addr, relval;
>
> @@ -633,6 +626,9 @@ static int load_flat_file(struct linux_binprm * bprm,
> relocated first). */
> if (get_user_ual(relval, reloc + i * sizeof(abi_ulong)))
> return -EFAULT;
> + relval = ntohl(relval);
> + if (flat_set_persistent(relval,&persistent))
> + continue;
> addr = flat_get_relocate_addr(relval);
> rp = calc_reloc(addr, libinfo, id, 1);
> if (rp == RELOC_FAILED)
> @@ -641,22 +637,20 @@ static int load_flat_file(struct linux_binprm * bprm,
> /* Get the pointer's value. */
> if (get_user_ual(addr, rp))
> return -EFAULT;
> + addr = flat_get_addr_from_rp(rp, relval, flags,&persistent);
> if (addr != 0) {
> /*
> * Do the relocation. PIC relocs in the data section are
> * already in target order
> */
> -
> -#ifndef TARGET_WORDS_BIGENDIAN
> if ((flags& FLAT_FLAG_GOTPIC) == 0)
> - addr = bswap32(addr);
> -#endif
> + addr = ntohl(addr);
> addr = calc_reloc(addr, libinfo, id, 0);
> if (addr == RELOC_FAILED)
> return -ENOEXEC;
>
> /* Write back the relocated pointer. */
> - if (put_user_ual(addr, rp))
> + if (flat_put_addr_at_rp(rp, addr, relval))
> return -EFAULT;
> }
> }
> diff --git a/linux-user/target_flat.h b/linux-user/target_flat.h
> new file mode 100644
> index 0000000..332b6e3
> --- /dev/null
> +++ b/linux-user/target_flat.h
> @@ -0,0 +1,9 @@
> +/* If your arch needs to do custom stuff, create your own target_flat.h
> + * header file in linux-user/<your arch>/
> + */
> +#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)
next prev parent reply other threads:[~2011-01-26 21:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-24 9:48 [Qemu-devel] [PATCH] linux-user/FLAT: allow targets to override FLAT reloc processing Mike Frysinger
2011-01-25 6:15 ` [Qemu-devel] [PATCH v2] linux-user/FLAT: allow targets to override FLAT processing Mike Frysinger
2011-01-27 0:20 ` Mike Frysinger
2011-01-26 21:21 ` riku voipio [this message]
2011-01-27 0:19 ` [Qemu-devel] Re: [PATCH] linux-user/FLAT: allow targets to override FLAT reloc processing Mike Frysinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D409040.6020504@iki.fi \
--to=riku.voipio@iki.fi \
--cc=qemu-devel@nongnu.org \
--cc=vapier@gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).