nooc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/nooc
Log | Files | Refs | LICENSE

commit 68d7593ce6ac5febd7a54ccb3f24417fa59d6c7b
parent 3f52cc9424dacfd6eec573493b08040653137cb2
Author: Nihal Jere <nihal@nihaljere.xyz>
Date:   Thu, 18 Nov 2021 18:38:26 -0600

DATA_OFFSET, compile with cproc

Diffstat:
Mmain.c | 23+++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/main.c b/main.c @@ -11,6 +11,8 @@ #include "array.h" +#define DATA_OFFSET 0x2000 + int elf(char *text, size_t len, char* data, size_t dlen, FILE *f) { @@ -50,9 +52,9 @@ elf(char *text, size_t len, char* data, size_t dlen, FILE *f) phdr_text.p_align = 0x1000; phdr_data.p_type = PT_LOAD; - phdr_data.p_offset = 0x2000; - phdr_data.p_vaddr = 0x2000; - phdr_data.p_paddr = 0x2000; + phdr_data.p_offset = DATA_OFFSET; + phdr_data.p_vaddr = DATA_OFFSET; + phdr_data.p_paddr = DATA_OFFSET; phdr_data.p_filesz = dlen; phdr_data.p_memsz = dlen; phdr_data.p_flags = PF_R; @@ -227,20 +229,18 @@ struct data { char *data; } data_seg; -#define DATA_OFFSET 0x2000 - uint64_t data_push(char *ptr, size_t len) { array_push((&data_seg), ptr, len); - return 0x2000 + data_seg.len - len; + return DATA_OFFSET + data_seg.len - len; } uint64_t data_pushint(uint64_t i) { array_push((&data_seg), (&i), 8); - return 0x2000 + data_seg.len - 8; + return DATA_OFFSET + data_seg.len - 8; } struct item { @@ -341,10 +341,11 @@ dumpval(struct value v) case P_INT: fprintf(stderr, "%ld", v.v.val); break; - case P_STR: + case P_STR: { fprintf(stderr, "\"%.*s\"", v.v.s.len, v.v.s.ptr); break; } + } } void @@ -563,21 +564,23 @@ genexpr(char *buf, size_t idx, int reg) case P_INT: len = mov_r_imm(ptr ? ptr + len : ptr, reg, expr->d.v.v.val); break; - case P_STR: + case P_STR: { int addr = data_push(expr->d.v.v.s.ptr, expr->d.v.v.s.len); len = mov_r_imm(ptr ? ptr + len : ptr, reg, addr); break; + } default: error("genexpr: unknown value type!"); } } else if (expr->kind == EXPR_BINARY) { switch (expr->d.op) { - case OP_PLUS: + case OP_PLUS: { struct expr *left = &exprs.data[expr->left]; struct expr *right = &exprs.data[expr->right]; len = mov_r_imm(ptr ? ptr + len : ptr, reg, left->d.v.v.val); len += add_r_imm(ptr ? ptr + len : ptr, reg, right->d.v.v.val); break; + } default: error("genexpr: unknown binary op!"); }