[PATCH] D62838: [Object] add isExecutableObject member function

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 18 23:25:42 PDT 2019


MaskRay added inline comments.


================
Comment at: llvm/include/llvm/Object/ELFObjectFile.h:1203
+template <class ELFT> bool ELFObjectFile<ELFT>::isExecutableObject() const {
+  return EF.getHeader()->e_type == ELF::ET_EXEC;
+}
----------------
abrachet wrote:
> MaskRay wrote:
> > Some people will be surprised if `ET_DYN` is not considered as executable object.
> > 
> > Position-Independent Executables use `ET_DYN`.
> $ llvm-readelf `which llvm-readelf` -h
> ...
> Type:                              DYN (Shared object file)
> 
> Oh yeah, good catch, thank you. How would you write this method? Does an executable always have e_entry as non zero? Is there ever a case where execve(2) will not fail if e_entry is 0? 
> 
> Also, should I worry about this? https://github.com/freebsd/freebsd/blob/master/sys/kern/imgact_elf.c#L1135 I don't know enough about ELF yet on this one. Thanks.
Do you have a use case (not a unittest) of this member function?

If you have one, let's see if relocatable/executable/shared should be trichotomy or not.

Trichotomy doesn't work in ELF. One may argue a PIE doesn't have PT_INTERP but a DSO doesn't. However, a static pie doesn't have PT_INTERP, either. Its difference from a DSO is if DT_DEBUG exists. However, DT_DEBUG can be disabled in lld with -z rodynamic (Fuchsia people do so)...

> Also, should I worry about this? https://github.com/freebsd/freebsd/blob/master/sys/kern/imgact_elf.c#L1135

We should not be bothered by FreeBSD Brandinfo


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62838/new/

https://reviews.llvm.org/D62838





More information about the llvm-commits mailing list