diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-30 15:44:47 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-30 15:44:47 +0300 |
| commit | 912dd003b081b628085e86bc151b8d91fbccb0c8 (patch) | |
| tree | 8e27533fc5555e4c152e3f132c2b09e0dba9d86d /tdump/src | |
| parent | 9fce87134559f8b5f86e105283b59e61a1707d39 (diff) | |
| download | tri-912dd003b081b628085e86bc151b8d91fbccb0c8.tar.gz tri-912dd003b081b628085e86bc151b8d91fbccb0c8.zip | |
janitorial duties
+ Add doc and formatting tooling
Diffstat (limited to 'tdump/src')
| -rw-r--r-- | tdump/src/disassembler.c | 191 | ||||
| -rw-r--r-- | tdump/src/main.c | 8 |
2 files changed, 100 insertions, 99 deletions
diff --git a/tdump/src/disassembler.c b/tdump/src/disassembler.c index e9383ca..d2b34c8 100644 --- a/tdump/src/disassembler.c +++ b/tdump/src/disassembler.c @@ -11,36 +11,36 @@ struct disasm_ctx { static const char *get_gpr(tri_t x) { switch (x) { - case X0: return "x0"; - case X1: return "sp"; - case X2: return "fp"; - case X3: return "gp"; - case X4: return "a0"; - case X5: return "a1"; - case X6: return "a2"; - case X7: return "a3"; - case X8: return "a4"; - case X9: return "a5"; - case X10: return "a6"; - case X11: return "t0"; - case X12: return "t1"; - case X13: return "t2"; - case X14: return "t3"; - case X15: return "t4"; - case X16: return "t5"; - case X17: return "t6"; - case X18: return "s0"; - case X19: return "s1"; - case X20: return "s2"; - case X21: return "s3"; - case X22: return "s4"; - case X23: return "s5"; - case X24: return "s6"; - case X25: return "tp"; - case X26: return "ra"; - case X27: return "a7"; - case X28: return "a8"; - case X29: return "a9"; + case X0: return "x0"; + case X1: return "sp"; + case X2: return "fp"; + case X3: return "gp"; + case X4: return "a0"; + case X5: return "a1"; + case X6: return "a2"; + case X7: return "a3"; + case X8: return "a4"; + case X9: return "a5"; + case X10: return "a6"; + case X11: return "t0"; + case X12: return "t1"; + case X13: return "t2"; + case X14: return "t3"; + case X15: return "t4"; + case X16: return "t5"; + case X17: return "t6"; + case X18: return "s0"; + case X19: return "s1"; + case X20: return "s2"; + case X21: return "s3"; + case X22: return "s4"; + case X23: return "s5"; + case X24: return "s6"; + case X25: return "tp"; + case X26: return "ra"; + case X27: return "a7"; + case X28: return "a8"; + case X29: return "a9"; case X30: return "a10"; case X31: return "a11"; case X32: return "a12"; @@ -56,9 +56,9 @@ static const char *get_gpr(tri_t x) case X42: return "a22"; case X43: return "a23"; case X44: return "a24"; - case X45: return "t7"; - case X46: return "t8"; - case X47: return "t9"; + case X45: return "t7"; + case X46: return "t8"; + case X47: return "t9"; case X48: return "t10"; case X49: return "t11"; case X50: return "t12"; @@ -74,9 +74,9 @@ static const char *get_gpr(tri_t x) case X60: return "t22"; case X61: return "t23"; case X62: return "t24"; - case X63: return "s7"; - case X64: return "s8"; - case X65: return "s9"; + case X63: return "s7"; + case X64: return "s8"; + case X65: return "s9"; case X66: return "s10"; case X67: return "s11"; case X68: return "s12"; @@ -119,7 +119,7 @@ static void *read_object_file(const char *file, size_t *len) if (!buf) return NULL; - fread(buf, s, 1 , f); + fread(buf, s, 1, f); fclose(f); return buf; @@ -136,7 +136,7 @@ static void disasm_lui(struct disasm_ctx *ctx, tri_t i) size_t l = tri_fmt_default(imm, 256, imm18); imm[l] = '\0'; printf(DEFAULT_PREFIX "lui %s, %s\n", - ctx->pc, get_gpr(rd), imm); + ctx->pc, get_gpr(rd), imm); } static void disasm_store(struct disasm_ctx *ctx, tri_t i) @@ -149,16 +149,16 @@ static void disasm_store(struct disasm_ctx *ctx, tri_t i) int w = tri_get_trit(fn0, 4); char *width = NULL; switch (w) { - case 0: width = "t"; break; - case 1: width = "w"; break; - default: width = "ill"; break; + case 0: width = "t"; break; + case 1: width = "w"; break; + default: width = "ill"; break; } char imm[256]; size_t l = tri_fmt_default(imm, 256, imm9); imm[l] = '\0'; printf(DEFAULT_PREFIX "st %s, %s, %s(%s)\n", - ctx->pc, width, get_gpr(rs1), imm, get_gpr(rs2)); + ctx->pc, width, get_gpr(rs1), imm, get_gpr(rs2)); } static void disasm_load(struct disasm_ctx *ctx, tri_t i) @@ -169,16 +169,16 @@ static void disasm_load(struct disasm_ctx *ctx, tri_t i) int w = tri_get_trit(fn0, 4); char *width = NULL; switch (w) { - case 0: width = "t"; break; - case 1: width = "w"; break; - default: width = "ill"; break; + case 0: width = "t"; break; + case 1: width = "w"; break; + default: width = "ill"; break; } char imm[256]; size_t l = tri_fmt_default(imm, 256, imm9); imm[l] = '\0'; printf(DEFAULT_PREFIX "ld %s, %s, %s(%s)\n", - ctx->pc, width, get_gpr(rd), imm, get_gpr(rs1)); + ctx->pc, width, get_gpr(rd), imm, get_gpr(rs1)); } static void disasm_op_imm(struct disasm_ctx *ctx, tri_t i) @@ -191,14 +191,14 @@ static void disasm_op_imm(struct disasm_ctx *ctx, tri_t i) imm[l] = '\0'; switch (fn0) { - case OP_IMM_ADDI: - printf(DEFAULT_PREFIX "addi %s, %s, %s\n", - ctx->pc, get_gpr(rd), get_gpr(rs1), imm); - break; + case OP_IMM_ADDI: + printf(DEFAULT_PREFIX "addi %s, %s, %s\n", + ctx->pc, get_gpr(rd), get_gpr(rs1), imm); + break; - default: - printf(DEFAULT_PREFIX "unknown/unimp op_imm\n", - ctx->pc); + default: + printf(DEFAULT_PREFIX "unknown/unimp op_imm\n", + ctx->pc); } } @@ -208,32 +208,32 @@ static void disasm_op(struct disasm_ctx *ctx, tri_t i) parse_r(i, &rd, &fn0, &rs1, &rs2, &fn5); switch (fn5) { - case 0: + case 0: switch (fn0) { - case OP_ADD: - printf(DEFAULT_PREFIX "add %s, %s, %s\n", - ctx->pc, - get_gpr(rd), - get_gpr(rs1), - get_gpr(rs2)); - break; + case OP_ADD: + printf(DEFAULT_PREFIX "add %s, %s, %s\n", + ctx->pc, + get_gpr(rd), + get_gpr(rs1), + get_gpr(rs2)); + break; - case OP_SUB: - printf(DEFAULT_PREFIX "sub %s, %s, %s\n", - ctx->pc, - get_gpr(rd), - get_gpr(rs1), - get_gpr(rs2)); - break; + case OP_SUB: + printf(DEFAULT_PREFIX "sub %s, %s, %s\n", + ctx->pc, + get_gpr(rd), + get_gpr(rs1), + get_gpr(rs2)); + break; - default: - printf(DEFAULT_PREFIX "unknown/unimp op\n", - ctx->pc); + default: + printf(DEFAULT_PREFIX "unknown/unimp op\n", + ctx->pc); } break; - default: printf(DEFAULT_PREFIX "unknown/unimp op metaclass\n", - ctx->pc); + default: printf(DEFAULT_PREFIX "unknown/unimp op metaclass\n", + ctx->pc); } } @@ -247,11 +247,11 @@ static void disasm_jalr(struct disasm_ctx *ctx, tri_t i) imm[l] = '\0'; switch (fn0) { - case 0: - printf(DEFAULT_PREFIX "jalr %s, %s(%s)\n", - ctx->pc, get_gpr(rd), imm, get_gpr(rs1)); + case 0: + printf(DEFAULT_PREFIX "jalr %s, %s(%s)\n", + ctx->pc, get_gpr(rd), imm, get_gpr(rs1)); break; - default: printf(DEFAULT_PREFIX "unknown/unimp jalr\n", ctx->pc); + default: printf(DEFAULT_PREFIX "unknown/unimp jalr\n", ctx->pc); } } @@ -267,11 +267,11 @@ static void disasm_branch(struct disasm_ctx *ctx, tri_t i) imm[l] = '\0'; switch (fn0) { - case BRANCH_BLT: - printf(DEFAULT_PREFIX "blt %s, %s, %s\n", - ctx->pc, get_gpr(rs1), get_gpr(rs2), imm); + case BRANCH_BLT: + printf(DEFAULT_PREFIX "blt %s, %s, %s\n", + ctx->pc, get_gpr(rs1), get_gpr(rs2), imm); break; - default: printf(DEFAULT_PREFIX "unknown/unimp branch\n", ctx->pc); + default: printf(DEFAULT_PREFIX "unknown/unimp branch\n", ctx->pc); } } @@ -285,7 +285,7 @@ static void disasm_auipc(struct disasm_ctx *ctx, tri_t i) imm[l] = '\0'; printf(DEFAULT_PREFIX "auipc %s, %s\n", - ctx->pc, get_gpr(rd), imm); + ctx->pc, get_gpr(rd), imm); } static tri_t read1(struct disasm_ctx *ctx, size_t off) @@ -307,23 +307,24 @@ int disassemble(const char *file) size_t len = 0; const uint32_t *buf = read_object_file(file, &len); /* somewhat specific but we know that each tryte is mapped to uin32_t */ - struct disasm_ctx ctx = {.buf = buf, .pc = 0, .len = len / sizeof(uint32_t)}; + struct disasm_ctx ctx = {.buf = buf, .pc = 0, + .len = len / sizeof(uint32_t)}; while (ctx.pc < ctx.len) { tri_t i = read3(&ctx, ctx.pc); switch (parse_opcode(i)) { - case OPCODE_LUI: disasm_lui(&ctx, i); break; - case OPCODE_STORE: disasm_store(&ctx, i); break; - case OPCODE_LOAD: disasm_load(&ctx, i); break; - //case OPCODE_SYSTEM: disasm_system(&ctx, i); break; - case OPCODE_OP_IMM: disasm_op_imm(&ctx, i); break; - case OPCODE_OP: disasm_op(&ctx, i); break; - case OPCODE_JALR: disasm_jalr(&ctx, i); break; - case OPCODE_BRANCH: disasm_branch(&ctx, i); break; - case OPCODE_AUIPC: disasm_auipc(&ctx, i); break; - default: - printf(DEFAULT_PREFIX "unimp/illegal\n", ctx.pc); - break; + case OPCODE_LUI: disasm_lui(&ctx, i); break; + case OPCODE_STORE: disasm_store(&ctx, i); break; + case OPCODE_LOAD: disasm_load(&ctx, i); break; + //case OPCODE_SYSTEM: disasm_system(&ctx, i); break; + case OPCODE_OP_IMM: disasm_op_imm(&ctx, i); break; + case OPCODE_OP: disasm_op(&ctx, i); break; + case OPCODE_JALR: disasm_jalr(&ctx, i); break; + case OPCODE_BRANCH: disasm_branch(&ctx, i); break; + case OPCODE_AUIPC: disasm_auipc(&ctx, i); break; + default: + printf(DEFAULT_PREFIX "unimp/illegal\n", ctx.pc); + break; } ctx.pc += 3; } diff --git a/tdump/src/main.c b/tdump/src/main.c index 4008d2c..511aa45 100644 --- a/tdump/src/main.c +++ b/tdump/src/main.c @@ -4,10 +4,10 @@ #include <stdio.h> static const char *cmdline_usage = -"tdump trinary deassembler usage:\n" -" tdump infile\n" -" -h Show usage (this)\n" -" infile File to deassemble\n" + "tdump trinary deassembler usage:\n" + " tdump infile\n" + " -h Show usage (this)\n" + " infile File to deassemble\n" ; static void usage() |
