Loaders rewrite argv[0] for old binaries (#1170)

For this to work, a loader has to be able to tell the difference between
an ‘old’ and a ‘new’ binary. This is achieved via a repurposing of ELF’s
e_flags field. We previously tried to use the padding in e_ident for it,
but binutils was resetting it to zero in e.g. strip.

This introduces one new ELF flag for cosmopolitan binaries. It is called
`EF_APE_MODERN`. We choose 0x101ca75, "lol cat 5".

It should now be safe to install the ape loader binfmt registration with
the `P` flag.
This commit is contained in:
Jōshin 2024-05-07 17:42:18 -07:00 committed by GitHub
parent 57c0b065c8
commit 7d31fc311a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 27 additions and 3 deletions

View file

@ -85,6 +85,10 @@
#define EM_RISCV 243
#define EM_BPF 247
/* the ape flag, "lol cat 5" */
#define EF_APE_MODERN 0x101ca75
#define EF_APE_MODERN_MASK 0x1ffffff
#define GRP_COMDAT 1
#define STN_UNDEF 0