[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [ARM/FDPIC 2/4] linux-user: ARM-FDPIC: Add support of F
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [ARM/FDPIC 2/4] linux-user: ARM-FDPIC: Add support of FDPIC for ARM. |
Date: |
Fri, 13 Apr 2018 16:07:55 +0100 |
On 6 April 2018 at 16:17, Christophe Lyon <address@hidden> wrote:
> Add FDPIC info into image_info structure since interpreter info is on
> stack and needs to be saved to be accessed later on.
>
> Co-Authored-By: Mickaël Guêné <address@hidden>
> Signed-off-by: Christophe Lyon <address@hidden>
>
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 7ba3795..363da67 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -287,6 +287,23 @@ static inline void init_thread(struct target_pt_regs
> *regs,
> /* For uClinux PIC binaries. */
> /* XXX: Linux does this only on ARM with no MMU (do we care ?) */
> regs->uregs[10] = infop->start_data;
> +#ifdef CONFIG_USE_FDPIC
> + /* Support ARM FDPIC. */
> + /* As described in the ABI document, r7 points to the loadmap info
> + * prepared by the kernel. If an interpreter is needed, r8 points
> + * to the interpreter loadmap and r9 points to the interpreter
> + * PT_DYNAMIC info. If no interpreter is needed, r8 is zer0, and
> + * r9 points to the main program PT_DYNAMIC info. */
> + regs->uregs[7] = infop->loadmap_addr;
> + if (infop->interpreter_loadmap_addr) {
> + /* Executable is dynamically loaded. */
> + regs->uregs[8] = infop->interpreter_loadmap_addr;
> + regs->uregs[9] = infop->interpreter_pt_dynamic_addr;
> + } else {
> + regs->uregs[8] = 0;
> + regs->uregs[9] = infop->pt_dynamic_addr;
> + }
Is it really correct to set these registers always, and not only if
this is an FDPIC ELF ?
> +#endif
> }
> int load_elf_binary(struct linux_binprm *bprm, struct image_info *info);
> diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> index 19a0c03..90c8ee1 100644
> --- a/target/arm/cpu.h
> +++ b/target/arm/cpu.h
> @@ -629,6 +629,12 @@ typedef struct CPUARMState {
> const struct arm_boot_info *boot_info;
> /* Store GICv3CPUState to access from this struct */
> void *gicv3state;
> +
> +#if defined(CONFIG_USER_ONLY) && defined(CONFIG_USE_FDPIC)
> + /* We need to know if we have an FDPIC binary to adapt signal
> + * syscalls. */
> + int is_fdpic;
linux-user specific information shouldn't live in CPUARMState;
put it in the TaskState struct instead, perhaps.
> +#endif
> } CPUARMState;
>
> /**
thanks
-- PMM
- [Qemu-devel] [ARM/FDPIC 0/4] FDPIC ABI for ARM, Christophe Lyon, 2018/04/06
- [Qemu-devel] [ARM/FDPIC 1/4] linux-user: ARM-FDPIC: Add configure option to support loading of FDPIC binaries, Christophe Lyon, 2018/04/06
- [Qemu-devel] [ARM/FDPIC 2/4] linux-user: ARM-FDPIC: Add support of FDPIC for ARM., Christophe Lyon, 2018/04/06
- Re: [Qemu-devel] [ARM/FDPIC 2/4] linux-user: ARM-FDPIC: Add support of FDPIC for ARM.,
Peter Maydell <=
- [Qemu-devel] [ARM/FDPIC 3/4] linux-user: ARM-FDPIC: Add support for signals for FDPIC targets, Christophe Lyon, 2018/04/06
- [Qemu-devel] [ARM/FDPIC 4/4] linux-user: ARM-FDPIC: Add arm get tls syscall support, Christophe Lyon, 2018/04/06
- Re: [Qemu-devel] [ARM/FDPIC 0/4] FDPIC ABI for ARM, Peter Maydell, 2018/04/13