History log of /haiku-fatelf/headers/private/system/elf_common.h
Revision Date Author Comments
# 64dd5554 03-Dec-2012 Landon Fuller <landonf@plausible.coop>

Add standard ELFDATANONE constant


# cc8a84fe 03-Dec-2012 Landon Fuller <landonf@plausible.coop>

Add missing ELF constants


# 79a3b81a 25-Nov-2012 Landon Fuller <landonf@plausible.coop>

Move elf_image_arch to elf_common.h


# 8d992901 23-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add SYSV and HAIKU ELFOSABI values.

Currently ELFOSABI_HAIKU is mapped to ELFOSABI_NONE, matching the
existing BeOS and Haiku binary targets.

One possible direction for ELFOSABI would be allocating a new
ELFOSABI_HAIKU value, and using this for all future platforms (gcc4-x86,
x86-64, ARM, MIPS, etc). This would allow for control over the
EI_ABIVERSION field, which could be used to define per-machine ABI
versioning. Examples would be ARMv6+softfloat, ARMv7, etc.

There are alternative approaches to providing this differentiation,
but to do so at the binary wrapper level is considerbly simpler than
resolving symbols inside of ELF binaries to determine exact ABI flags.

For comparison, Mach-O uses a 32-bit cpu and cpu_subtype fields, where
the 'cpu' field defines the general architecture family (ARM, x86, etc),
and the subtype is used to define specific subtypes (ARMv6, ARMv7),
along with two bytes dedicated for feature flags.

See also:
http://fxr.watson.org/fxr/source//osfmk/mach/machine.h?v=xnu-2050.18.24

Using the EI_ABIVERSION field with ELF may be one reasonable way to
implement similar functionality while maintaining standard ELF
compatibility. As an alternative, one could extend the ELF or FatELF
headers; the continued value of ELF is in leveraging existing tooling,
rather than any of the notions of cross-OS binary compatibility under
which ELF was specified. FatELF itself is not (yet?) a standard, which
also gives us some leeway to make changes to it before deployment.


# 7440bebd 23-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add standard ELFOSABI_* constants


# 242a7035 22-Nov-2012 Landon Fuller <landonf@plausible.coop>

Define ELF_DATA, evaluates to the host value.

This is based on the header suggestions in #8520


# 12b500a0 22-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add missing standard ELF constants


# 85d4a8bc 09-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Fixed compilation of C code using ELF headers.


# 3b802628 09-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Support ELF64 in the kernel.

This has been done by adding typedefs in elf_common.h to the correct ELF
structures for the architecture, and changing all Elf32_* uses to those
types. I don't know whether image loading works as I cannot test it yet,
there may be some 64-bit safety issues around. However, symbol lookup for
the kernel is working correctly.


# ccadfaee 22-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changed the boot ELF code to use templates and added ELF64 support.

The actual implementation of the ELF loading methods have been put into
an ELFLoader template class that takes a single template parameter, which
is a structure containing all the necessary ELF typedefs. It's a bit
verbose, but I thought it was a neater solution than using a bunch of
standalone functions with a huge number of template parameters. There is
no change to code outside of elf.cpp, the ELF32/ELF64 differences are
handled internally.


# 474aa3b7 21-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Added ELF64 headers, common ELF32 and ELF64 definitions moved to elf_common.h.


# 79a3b81aa340ac3b28aa599d17150b61ed8b689b 25-Nov-2012 Landon Fuller <landonf@plausible.coop>

Move elf_image_arch to elf_common.h


# 8d992901895bcc87a1d463f6f84a3ce52eb9da1a 23-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add SYSV and HAIKU ELFOSABI values.

Currently ELFOSABI_HAIKU is mapped to ELFOSABI_NONE, matching the
existing BeOS and Haiku binary targets.

One possible direction for ELFOSABI would be allocating a new
ELFOSABI_HAIKU value, and using this for all future platforms (gcc4-x86,
x86-64, ARM, MIPS, etc). This would allow for control over the
EI_ABIVERSION field, which could be used to define per-machine ABI
versioning. Examples would be ARMv6+softfloat, ARMv7, etc.

There are alternative approaches to providing this differentiation,
but to do so at the binary wrapper level is considerbly simpler than
resolving symbols inside of ELF binaries to determine exact ABI flags.

For comparison, Mach-O uses a 32-bit cpu and cpu_subtype fields, where
the 'cpu' field defines the general architecture family (ARM, x86, etc),
and the subtype is used to define specific subtypes (ARMv6, ARMv7),
along with two bytes dedicated for feature flags.

See also:
http://fxr.watson.org/fxr/source//osfmk/mach/machine.h?v=xnu-2050.18.24

Using the EI_ABIVERSION field with ELF may be one reasonable way to
implement similar functionality while maintaining standard ELF
compatibility. As an alternative, one could extend the ELF or FatELF
headers; the continued value of ELF is in leveraging existing tooling,
rather than any of the notions of cross-OS binary compatibility under
which ELF was specified. FatELF itself is not (yet?) a standard, which
also gives us some leeway to make changes to it before deployment.


# 7440bebd98dff4f9def62778b13c8c8983057208 23-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add standard ELFOSABI_* constants


# 242a7035e1d154e6ea48f545f8e2d8d269080d17 22-Nov-2012 Landon Fuller <landonf@plausible.coop>

Define ELF_DATA, evaluates to the host value.

This is based on the header suggestions in #8520


# 12b500a0178fd2f3b15303dd127bddba5c2ad981 22-Nov-2012 Landon Fuller <landonf@plausible.coop>

Add missing standard ELF constants


# 85d4a8bc4e248b992efcde8af001f156cd2c47a9 09-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Fixed compilation of C code using ELF headers.


# 3b802628b8e2aa14eb4c674d0a8cf900f522baa1 09-Jul-2012 Alex Smith <alex@alex-smith.me.uk>

Support ELF64 in the kernel.

This has been done by adding typedefs in elf_common.h to the correct ELF
structures for the architecture, and changing all Elf32_* uses to those
types. I don't know whether image loading works as I cannot test it yet,
there may be some 64-bit safety issues around. However, symbol lookup for
the kernel is working correctly.


# ccadfaeeb577eb5f129adcc1441b92aaf9f5e443 22-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changed the boot ELF code to use templates and added ELF64 support.

The actual implementation of the ELF loading methods have been put into
an ELFLoader template class that takes a single template parameter, which
is a structure containing all the necessary ELF typedefs. It's a bit
verbose, but I thought it was a neater solution than using a bunch of
standalone functions with a huge number of template parameters. There is
no change to code outside of elf.cpp, the ELF32/ELF64 differences are
handled internally.


# 474aa3b76e4c661c259e2200db895712ded3f9d6 21-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Added ELF64 headers, common ELF32 and ELF64 definitions moved to elf_common.h.