w6a,w6l: char-literals for ELF/archive magic bytes (Wave-1)
byte-id-neutral: every magic-decimal sub is value-equivalent to its ASCII char-literal. 0x7F (ELF byte-0), ELFCLASS64=2, NUL sentinels, and hex/itoa radix arithmetic kept decimal (no char identity). Regenerated w6a/w6l main.combined.ww (the only two embedders).
This commit is contained in:
@@ -209,14 +209,14 @@ type armember = struct {
|
||||
|
||||
fn isarchive(p: *u8, len: u64) bool = {
|
||||
if (len < 8u64) { return false; };
|
||||
if (p[0u64] != 33u8) { return false; }; // '!'
|
||||
if (p[1u64] != 60u8) { return false; }; // '<'
|
||||
if (p[2u64] != 97u8) { return false; }; // 'a'
|
||||
if (p[3u64] != 114u8) { return false; }; // 'r'
|
||||
if (p[4u64] != 99u8) { return false; }; // 'c'
|
||||
if (p[5u64] != 104u8) { return false; }; // 'h'
|
||||
if (p[6u64] != 62u8) { return false; }; // '>'
|
||||
if (p[7u64] != 10u8) { return false; }; // '\n'
|
||||
if (p[0u64] != '!') { return false; };
|
||||
if (p[1u64] != '<') { return false; };
|
||||
if (p[2u64] != 'a') { return false; };
|
||||
if (p[3u64] != 'r') { return false; };
|
||||
if (p[4u64] != 'c') { return false; };
|
||||
if (p[5u64] != 'h') { return false; };
|
||||
if (p[6u64] != '>') { return false; };
|
||||
if (p[7u64] != '\n') { return false; };
|
||||
return true;
|
||||
};
|
||||
|
||||
@@ -240,9 +240,9 @@ fn arfield(p: *u8, n: u64) u64 = {
|
||||
fn elfglobals(buf: *u8, len: u64) *defent = {
|
||||
if (len < EHDR_SIZE) { return nil; };
|
||||
if (buf[0u64] != 127u8) { return nil; };
|
||||
if (buf[1u64] != 69u8) { return nil; };
|
||||
if (buf[2u64] != 76u8) { return nil; };
|
||||
if (buf[3u64] != 70u8) { return nil; };
|
||||
if (buf[1u64] != 'E') { return nil; };
|
||||
if (buf[2u64] != 'L') { return nil; };
|
||||
if (buf[3u64] != 'F') { return nil; };
|
||||
|
||||
let shoff: u64 = rdu64(buf, EHDR_SHOFF);
|
||||
let shnum: u32 = rdu16(buf, EHDR_SHNUM): u32;
|
||||
@@ -344,7 +344,7 @@ fn loadarchive(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
|
||||
let first: u8 = buf[pos];
|
||||
// Skip the symbol table ('/'), long-name table ('//'), and
|
||||
// any padding entries (NUL or space leading byte).
|
||||
if (first != 47u8) { if (first != 0u8) { if (first != 32u8) {
|
||||
if (first != '/') { if (first != 0u8) { if (first != ' ') {
|
||||
let m: *armember = alloc(armember { size = hdrsize })!;
|
||||
let mbs: []u8 = alloc([], hdrsize)!;
|
||||
let mb: *u8 = mbs.ptr;
|
||||
@@ -402,9 +402,9 @@ fn loadimage(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
|
||||
if (len < EHDR_SIZE) { return -1; };
|
||||
// magic: 0x7f, 'E', 'L', 'F'
|
||||
if (buf[0u64] != 127u8) { return -1; };
|
||||
if (buf[1u64] != 69u8) { return -1; };
|
||||
if (buf[2u64] != 76u8) { return -1; };
|
||||
if (buf[3u64] != 70u8) { return -1; };
|
||||
if (buf[1u64] != 'E') { return -1; };
|
||||
if (buf[2u64] != 'L') { return -1; };
|
||||
if (buf[3u64] != 'F') { return -1; };
|
||||
if (buf[4u64] != 2u8) { return -1; }; // ELFCLASS64
|
||||
if (rdu16(buf, EHDR_TYPE) != ET_REL: u16) { return -1; };
|
||||
if (rdu16(buf, EHDR_MACHINE) != EM_X86_64: u16) { return -1; };
|
||||
|
||||
Reference in New Issue
Block a user