qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [ARM/FDPIC v2 2/4] linux-user: ARM-FDPIC: Identify ARM


From: Christophe Lyon
Subject: Re: [Qemu-devel] [ARM/FDPIC v2 2/4] linux-user: ARM-FDPIC: Identify ARM FDPIC binaries
Date: Mon, 23 Apr 2018 14:53:38 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

On 23/04/2018 14:17, Peter Maydell wrote:
On 23 April 2018 at 08:51, Christophe Lyon <address@hidden> wrote:
Define an ARM-specific version of elf_is_fdpic:
FDPIC ELF objects are identified with e_ident[EI_OSABI] ==
ELFOSABI_ARM_FDPIC.

Co-Authored-By: Mickaël Guêné <address@hidden>
Signed-off-by: Christophe Lyon <address@hidden>

diff --git a/include/elf.h b/include/elf.h
index c0dc9bb..934dbbd 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -1483,6 +1483,7 @@ typedef struct elf64_shdr {
  #define ELFOSABI_TRU64          10      /* Compaq TRU64 UNIX.  */
  #define ELFOSABI_MODESTO        11      /* Novell Modesto.  */
  #define ELFOSABI_OPENBSD        12      /* OpenBSD.  */
+#define ELFOSABI_ARM_FDPIC      65      /* ARM FDPIC */
  #define ELFOSABI_ARM            97      /* ARM */
  #define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application 
*/

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index bbe93b0..76d7718 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1681,11 +1681,18 @@ static void zero_bss(abi_ulong elf_bss, abi_ulong 
last_bss, int prot)
      }
  }

+#ifdef TARGET_ARM
+static int elf_is_fdpic(struct elfhdr *exec)
+{
+    return exec->e_ident[EI_OSABI] == ELFOSABI_ARM_FDPIC;
+}
+#else
  /* Default implementation, always false.  */
  static int elf_is_fdpic(struct elfhdr *exec)
  {
      return 0;
  }
+#endif

I have a strong dislike for per-target ifdef ladders. Can we instead
put the target's implementation of elf_is_fdpic() into
linux-user/$ARCH/target_elf.h
and also have that header do
#define TARGET_HAS_ELF_FDPIC

and then in the generic code we can protect the default elf_is_fdpic()
with #ifndef TARGET_HAS_ELF_FDPIC.


How invasive could that be?
Your proposal is appealing, but target_elf.h is only included by 
linux-user/main.c, which does not define elfhdr etc...
All that knowledge is in linux-user/elfload.c, which controls what 
include/elf.h defines.

Should I re-engineer that?

Thanks,

Christophe


thanks
-- PMM
.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]