mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-06 09:50:28 +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"
|
||||
// Try to use a system-wide APE loader.
|
||||
.ascii "type ape-loader >/dev/null 2>&1 && "
|
||||
.ascii "exec ape-loader \"$0\" \"$@\"\n"
|
||||
.ascii "exec ape-loader \"$o\" \"$@\"\n"
|
||||
#ifdef APE_LOADER
|
||||
// There is no system-wide APE loader, but there is one
|
||||
// embedded inside the APE. So if the system is not MacOs,
|
||||
// extract the loader into a temp folder, and use it to
|
||||
// load the APE without modifying it.
|
||||
.ascii "if [ ! -d /Applications ]; then\n"
|
||||
.ascii "t=\"${TMPDIR:-/tmp}/ape-loader.$$\"\n"
|
||||
.ascii "dd if=\"$o\" of=\"$t\" skip=\""
|
||||
.ascii "t=\"${TMPDIR:-/tmp}/ape-loader\"\n"
|
||||
.ascii "[ -x \"$t\" ] || {\ndd if=\"$o\" of=\"$t\" skip=\""
|
||||
.shstub ape_loader_dd_skip,2
|
||||
.ascii "\" count=\""
|
||||
.shstub ape_loader_dd_count,2
|
||||
.ascii "\" bs=\""
|
||||
.shstub ape_loader_dd_bs,2
|
||||
.ascii "\" 2>/dev/null\n"
|
||||
.ascii "chmod 700 \"$t\"\n"
|
||||
.ascii "exec \"$t\" \"$0\" \"$@\"\n"
|
||||
.ascii "\" bs=64 2>/dev/null &&\n"
|
||||
.ascii "chmod 700 \"$t\"\n}\n"
|
||||
.ascii "exec \"$t\" \"$o\" \"$@\"\n"
|
||||
.ascii "fi\n"
|
||||
#endif
|
||||
#ifndef APE_NO_MODIFY_SELF
|
||||
|
|
37
ape/ape.lds
37
ape/ape.lds
|
@ -204,13 +204,6 @@ SECTIONS {
|
|||
KEEP(*(.apesh))
|
||||
KEEP(*(.head2))
|
||||
KEEP(*(.text.head))
|
||||
|
||||
/* Loader */
|
||||
. = ALIGN(64);
|
||||
HIDDEN(ape_loader = .);
|
||||
KEEP(*(.ape.loader))
|
||||
. = ALIGN(64);
|
||||
HIDDEN(ape_loader_end = .);
|
||||
|
||||
/* Executable & Linkable Format */
|
||||
. = ALIGN(__SIZEOF_POINTER__);
|
||||
|
@ -374,6 +367,15 @@ SECTIONS {
|
|||
} :Ram
|
||||
|
||||
/*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 */
|
||||
|
||||
.zip . : {
|
||||
|
@ -485,17 +487,6 @@ HIDDEN(ape_stack_filesz = 0);
|
|||
HIDDEN(ape_stack_memsz = STACKSIZE);
|
||||
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_vaddr = ape_note);
|
||||
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_align = PAGESIZE);
|
||||
|
||||
SHSTUB2(ape_loader_dd_skip, RVA(ape_loader) / 64);
|
||||
SHSTUB2(ape_loader_dd_count, (ape_loader_end - ape_loader) / 64);
|
||||
|
||||
#if SupportsXnu()
|
||||
SHSTUB2(ape_macho_dd_skip, RVA(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_shstrndx);
|
||||
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_align);
|
||||
CHURN(ape_note_end);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue