mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
db0d8dd806
The "no modify self" variant of Actually Portable Executable is now supported on all platforms. If you use `$(APE_NO_MODIFY_SELF)` then ld.bfd will embed a 4096 byte ELF binary and a 4096 byte Macho file which are installed on the fly to ${TMPDIR:-/tmp}, which enables us launch the executable, without needing to copy the whole executable To prevent it from copying a tiny executable to your temp directory you need to install the `ape` command (renamed from ape-loader), to a system path. For example: # FreeBSD / NetBSD / OpenBSD make -j8 o//ape/ape cp o//ape/ape /usr/bin/ape # Mac OS # make -j8 o//ape/ape.macho curl https://justine.lol/ape.macho >/usr/bin/ape chmod +x /usr/bin/ape On Linux you can get even more performance with the new binfmt_misc support which makes launching non-modifying APE binaries as fast as launching ELF executables. Running the following command: # Linux ape/apeinstall.sh Will copy APE loader to /usr/bin/ape and register with binfmt_misc Lastly, this change also fixes a really interesting race condition with OpenBSD thread joining.
21 lines
666 B
C
21 lines
666 B
C
#ifndef COSMOPOLITAN_LIBC_FMT_LEB128_H_
|
|
#define COSMOPOLITAN_LIBC_FMT_LEB128_H_
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
COSMOPOLITAN_C_START_
|
|
|
|
char *sleb64(char *, int64_t);
|
|
char *zleb64(char[hasatleast 10], int64_t);
|
|
char *uleb64(char[hasatleast 10], uint64_t);
|
|
int unzleb64(const char *, size_t, int64_t *);
|
|
int unuleb64(char *, size_t, uint64_t *);
|
|
|
|
#ifndef __STRICT_ANSI__
|
|
char *sleb128(char *, int128_t);
|
|
char *zleb128(char *, int128_t);
|
|
char *uleb128(char *, uint128_t);
|
|
int unsleb128(const void *, size_t, int128_t *);
|
|
#endif /* __STRICT_ANSI__ */
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_FMT_LEB128_H_ */
|