mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-07 02:10:27 +00:00
Moved loader into its own .payload section
This commit is contained in:
parent
2c0ad922d5
commit
892d201e12
2 changed files with 18 additions and 33 deletions
14
ape/ape.S
14
ape/ape.S
|
@ -543,23 +543,21 @@ apesh: .ascii "'\n#'\"\n" # sixth edition shebang
|
||||||
.ascii "o=\"$(command -v \"$0\")\"\n"
|
.ascii "o=\"$(command -v \"$0\")\"\n"
|
||||||
// Try to use a system-wide APE loader.
|
// Try to use a system-wide APE loader.
|
||||||
.ascii "type ape-loader >/dev/null 2>&1 && "
|
.ascii "type ape-loader >/dev/null 2>&1 && "
|
||||||
.ascii "exec ape-loader \"$0\" \"$@\"\n"
|
.ascii "exec ape-loader \"$o\" \"$@\"\n"
|
||||||
#ifdef APE_LOADER
|
#ifdef APE_LOADER
|
||||||
// There is no system-wide APE loader, but there is one
|
// There is no system-wide APE loader, but there is one
|
||||||
// embedded inside the APE. So if the system is not MacOs,
|
// embedded inside the APE. So if the system is not MacOs,
|
||||||
// extract the loader into a temp folder, and use it to
|
// extract the loader into a temp folder, and use it to
|
||||||
// load the APE without modifying it.
|
// load the APE without modifying it.
|
||||||
.ascii "if [ ! -d /Applications ]; then\n"
|
.ascii "if [ ! -d /Applications ]; then\n"
|
||||||
.ascii "t=\"${TMPDIR:-/tmp}/ape-loader.$$\"\n"
|
.ascii "t=\"${TMPDIR:-/tmp}/ape-loader\"\n"
|
||||||
.ascii "dd if=\"$o\" of=\"$t\" skip=\""
|
.ascii "[ -x \"$t\" ] || {\ndd if=\"$o\" of=\"$t\" skip=\""
|
||||||
.shstub ape_loader_dd_skip,2
|
.shstub ape_loader_dd_skip,2
|
||||||
.ascii "\" count=\""
|
.ascii "\" count=\""
|
||||||
.shstub ape_loader_dd_count,2
|
.shstub ape_loader_dd_count,2
|
||||||
.ascii "\" bs=\""
|
.ascii "\" bs=64 2>/dev/null &&\n"
|
||||||
.shstub ape_loader_dd_bs,2
|
.ascii "chmod 700 \"$t\"\n}\n"
|
||||||
.ascii "\" 2>/dev/null\n"
|
.ascii "exec \"$t\" \"$o\" \"$@\"\n"
|
||||||
.ascii "chmod 700 \"$t\"\n"
|
|
||||||
.ascii "exec \"$t\" \"$0\" \"$@\"\n"
|
|
||||||
.ascii "fi\n"
|
.ascii "fi\n"
|
||||||
#endif
|
#endif
|
||||||
#ifndef APE_NO_MODIFY_SELF
|
#ifndef APE_NO_MODIFY_SELF
|
||||||
|
|
37
ape/ape.lds
37
ape/ape.lds
|
@ -205,13 +205,6 @@ SECTIONS {
|
||||||
KEEP(*(.head2))
|
KEEP(*(.head2))
|
||||||
KEEP(*(.text.head))
|
KEEP(*(.text.head))
|
||||||
|
|
||||||
/* Loader */
|
|
||||||
. = ALIGN(64);
|
|
||||||
HIDDEN(ape_loader = .);
|
|
||||||
KEEP(*(.ape.loader))
|
|
||||||
. = ALIGN(64);
|
|
||||||
HIDDEN(ape_loader_end = .);
|
|
||||||
|
|
||||||
/* Executable & Linkable Format */
|
/* Executable & Linkable Format */
|
||||||
. = ALIGN(__SIZEOF_POINTER__);
|
. = ALIGN(__SIZEOF_POINTER__);
|
||||||
HIDDEN(ape_phdrs = .);
|
HIDDEN(ape_phdrs = .);
|
||||||
|
@ -374,6 +367,15 @@ SECTIONS {
|
||||||
} :Ram
|
} :Ram
|
||||||
|
|
||||||
/*END: file content that's loaded by o/s */
|
/*END: file content that's loaded by o/s */
|
||||||
|
/*BEGIN: payload (for now, only the APE loader) */
|
||||||
|
.payload ALIGN(64) : {
|
||||||
|
/* Loader */
|
||||||
|
HIDDEN(ape_loader = .);
|
||||||
|
KEEP(*(.ape.loader))
|
||||||
|
. = ALIGN(64);
|
||||||
|
HIDDEN(ape_loader_end = .);
|
||||||
|
}
|
||||||
|
/*END: payload */
|
||||||
/*BEGIN: bss memory void */
|
/*BEGIN: bss memory void */
|
||||||
|
|
||||||
.zip . : {
|
.zip . : {
|
||||||
|
@ -485,17 +487,6 @@ HIDDEN(ape_stack_filesz = 0);
|
||||||
HIDDEN(ape_stack_memsz = STACKSIZE);
|
HIDDEN(ape_stack_memsz = STACKSIZE);
|
||||||
HIDDEN(ape_stack_align = 16);
|
HIDDEN(ape_stack_align = 16);
|
||||||
|
|
||||||
HIDDEN(ape_loader_offset = ape_rom_offset + ape_loader - ape_rom_vaddr);
|
|
||||||
HIDDEN(ape_loader_vaddr = ape_loader);
|
|
||||||
HIDDEN(ape_loader_paddr = ape_rom_paddr + ape_loader_offset);
|
|
||||||
HIDDEN(ape_loader_filesz = ape_loader_end - ape_loader);
|
|
||||||
HIDDEN(ape_loader_memsz = ape_loader_filesz);
|
|
||||||
HIDDEN(ape_loader_align = 64);
|
|
||||||
HIDDEN(ape_loader_rva = RVA(ape_loader_vaddr));
|
|
||||||
SHSTUB2(ape_loader_dd_bs, ape_loader_align);
|
|
||||||
SHSTUB2(ape_loader_dd_skip, ape_loader_rva / ape_loader_align);
|
|
||||||
SHSTUB2(ape_loader_dd_count, ape_loader_filesz / ape_loader_align);
|
|
||||||
|
|
||||||
HIDDEN(ape_note_offset = ape_rom_offset + (ape_note - ape_rom_vaddr));
|
HIDDEN(ape_note_offset = ape_rom_offset + (ape_note - ape_rom_vaddr));
|
||||||
HIDDEN(ape_note_vaddr = ape_note);
|
HIDDEN(ape_note_vaddr = ape_note);
|
||||||
HIDDEN(ape_note_paddr = ape_rom_paddr + ape_note_offset);
|
HIDDEN(ape_note_paddr = ape_rom_paddr + ape_note_offset);
|
||||||
|
@ -526,6 +517,9 @@ HIDDEN(ape_bss_filesz = 0);
|
||||||
HIDDEN(ape_bss_memsz = SIZEOF(.bss));
|
HIDDEN(ape_bss_memsz = SIZEOF(.bss));
|
||||||
HIDDEN(ape_bss_align = PAGESIZE);
|
HIDDEN(ape_bss_align = PAGESIZE);
|
||||||
|
|
||||||
|
SHSTUB2(ape_loader_dd_skip, RVA(ape_loader) / 64);
|
||||||
|
SHSTUB2(ape_loader_dd_count, (ape_loader_end - ape_loader) / 64);
|
||||||
|
|
||||||
#if SupportsXnu()
|
#if SupportsXnu()
|
||||||
SHSTUB2(ape_macho_dd_skip, RVA(ape_macho) / 8);
|
SHSTUB2(ape_macho_dd_skip, RVA(ape_macho) / 8);
|
||||||
SHSTUB2(ape_macho_dd_count, (ape_macho_end - ape_macho) / 8);
|
SHSTUB2(ape_macho_dd_count, (ape_macho_end - ape_macho) / 8);
|
||||||
|
@ -607,13 +601,6 @@ CHURN(ape_elf_shnum);
|
||||||
CHURN(ape_elf_shoff);
|
CHURN(ape_elf_shoff);
|
||||||
CHURN(ape_elf_shstrndx);
|
CHURN(ape_elf_shstrndx);
|
||||||
CHURN(ape_macho_end);
|
CHURN(ape_macho_end);
|
||||||
CHURN(ape_loader_offset);
|
|
||||||
CHURN(ape_loader_vaddr);
|
|
||||||
CHURN(ape_loader_paddr);
|
|
||||||
CHURN(ape_loader_filesz);
|
|
||||||
CHURN(ape_loader_memsz);
|
|
||||||
CHURN(ape_loader_align);
|
|
||||||
CHURN(ape_loader_rva);
|
|
||||||
CHURN(ape_note);
|
CHURN(ape_note);
|
||||||
CHURN(ape_note_align);
|
CHURN(ape_note_align);
|
||||||
CHURN(ape_note_end);
|
CHURN(ape_note_end);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue