On 23 April 2018 at 08:51, Christophe Lyon <christophe.l...@st.com> 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é <mickael.gu...@st.com> > Signed-off-by: Christophe Lyon <christophe.l...@st.com> > > 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. thanks -- PMM