diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2024-07-13 19:35:19 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2024-07-13 19:35:19 +0200 |
commit | 90dfcfd6913b24700b956e9b21661f58b0913e88 (patch) | |
tree | b064244d5b61ef42c0218151b34d612723c81890 | |
parent | 85c9255ab4f56a8c88a3b1910f1d792ea76def16 (diff) | |
download | bxgen-90dfcfd6913b24700b956e9b21661f58b0913e88.zip |
Cleanup
-rwxr-xr-x | bxgen.c | 94 |
1 files changed, 66 insertions, 28 deletions
@@ -6,7 +6,7 @@ #/ Binary executable code generation and linking. #/ Compiler backend. #/ -#/ ================================================================ +#/ ---------------------------------------------------------------- #/ #/ Qualities #/ @@ -44,7 +44,14 @@ #/ - JIT #/ - COFF, PE, OMF, Mach-O #/ - i386, RISC-V, ARM, WebAssembly +#/ - Soft floating-point arithmeric #/ - Built-in standard library +#/ - Built-in battaries: +#/ - File I/O +#/ - Input devices +#/ - Networking +#/ - Graphics +#/ - Audio #/ #/ Bugs #/ @@ -415,7 +422,11 @@ void l_static(i64 unit, c8 *static_library); // ================================================================ // -// Main features implementation +// IMPLEMENTATION +// +// ================================================================ +// +// * Basic utilities // // ================================================================ @@ -425,9 +436,6 @@ void l_static(i64 unit, c8 *static_library); #error Implementation code should be compiled with a C compiler! #endif -// Utils -// - #ifndef NULL #define NULL ((void *) 0) #endif @@ -489,6 +497,12 @@ c8 *bx_find_char(c8 *s, c8 *s_end, c8 c) { return *s == c ? s : NULL; } +// ================================================================ +// +// * Semantic graph +// +// ================================================================ + // IR building procs // @@ -797,10 +811,15 @@ void unit_set_entry_point(Pool *pool, i64 unit, i64 entry_point_proc) { pool->entities[unit].unit.entry_point_index = p->index_in_unit; } -// Serialization +// ================================================================ // +// * Serialization +// +// ================================================================ u16 read_u16(i32 endianness, void const *v) { + BX_ASSERT(v != NULL); + u8 const *u = (u8 const *) v; if (endianness == LE) @@ -816,6 +835,8 @@ u16 read_u16(i32 endianness, void const *v) { } u32 read_u32(i32 endianness, void const *v) { + BX_ASSERT(v != NULL); + u8 const *u = (u8 const *) v; if (endianness == LE) @@ -836,6 +857,8 @@ u32 read_u32(i32 endianness, void const *v) { } u64 read_u64(i32 endianness, void const *v) { + BX_ASSERT(v != NULL); + u8 const *u = (u8 const *) v; if (endianness == LE) @@ -863,6 +886,8 @@ u64 read_u64(i32 endianness, void const *v) { } void write_u16(i32 endianness, u16 x, void *v) { + BX_ASSERT(v != NULL); + u8 *u = (u8 *) v; if (endianness == LE) { @@ -879,6 +904,8 @@ void write_u16(i32 endianness, u16 x, void *v) { } void write_u32(i32 endianness, u32 x, void *v) { + BX_ASSERT(v != NULL); + u8 *u = (u8 *) v; if (endianness == LE) { @@ -899,6 +926,8 @@ void write_u32(i32 endianness, u32 x, void *v) { } void write_u64(i32 endianness, u64 x, void *v) { + BX_ASSERT(v != NULL); + u8 *u = (u8 *) v; if (endianness == LE) { @@ -966,8 +995,11 @@ void write_f64(i32 endianness, f64 x, void *v) { write_u64(endianness, *(u64 *) &x, v); } -// Code generation proc +// ================================================================ // +// * Code generation and linking +// +// ================================================================ #include <stdio.h> // TEMP #include <stdlib.h> // TEMP @@ -1053,7 +1085,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data BX_ASSERT(pool->entities[unit].unit.entry_point_index != UNDEFINED); BX_ASSERT(target == (FORMAT_ELF | ARCH_X86_64)); - // ================================================================ + // ============================================================== c8 ELF_MAGIC[4] = "\x7f" "ELF"; @@ -1081,7 +1113,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data c8 STRTAB[] = ".strtab"; - // ================================================================ + // ============================================================== #define WRITE(x, n) io_write( io_out, n, x, io_user_data ) #define WRITE_V(...) io_write( io_out, sizeof((u8[]) {__VA_ARGS__}), (u8[]) {__VA_ARGS__}, io_user_data ) @@ -1161,7 +1193,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data #undef WRITE - // ================================================================ + // ============================================================== // Intermediate buffer // @@ -1248,7 +1280,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data f_begin = f_data + fn_size; } else { - // ================================================================ + // ======================================================== // // Decode ELF object file @@ -1296,14 +1328,14 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data f_begin = f_data + fn_size; - // ================================================================ + // ======================================================== } } } return; - // ================================================================ + // ============================================================== // Read dependencies // @@ -1329,7 +1361,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data i64 n = 0, current_offset = 0; - // ================================================================ + // ========================================================== // // Read AR library @@ -1483,7 +1515,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data printf(" <SYMBOLS NOT FOUND>\n"); } - // ================================================================ + // ====================================================== // // Decode ELF object file @@ -1737,7 +1769,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data printf("\n"); switch (type) { - // ================================================================ + // ================================================== // // Symbols @@ -1841,7 +1873,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data byte_count = prev_byte_count; } break; - // ================================================================ + // ================================================== // // Relocarions without addends @@ -1878,7 +1910,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data byte_count = prev_byte_count; } break; - // ================================================================ + // ================================================== // // Relocarions with addends // @@ -1981,7 +2013,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data byte_count = prev_byte_count; } break; - // ================================================================ + // ================================================== default:; } @@ -1994,7 +2026,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data #undef READ - // ================================================================ + // ====================================================== } } @@ -2004,7 +2036,7 @@ void unit_write(Pool *pool, i64 unit, u16 target, i64 io_out, void *io_user_data "<FILE NOT FOUND>", symbols[symbol_index]); - // ================================================================ + // ========================================================== io_close(f, io_user_data); } @@ -2054,7 +2086,7 @@ void io_chmod_exe(i64 f, void *user_data) { // ================================================================ // -// Helpers implementation +// * Helper procedures // // ================================================================ @@ -2077,7 +2109,10 @@ void bx_assert(b8 condition, c8 const *message, u32 line, c8 const *file) { return; fflush(stdout); - fprintf(stderr, "\r\x1b[31mASSERTION:\x1b[37m `\x1b[33m%s\x1b[37m` is false in \x1b[36m%s:%d\x1b[37m\n", message, file, line); + fprintf(stderr, + "\r\x1b[31mASSERTION:\x1b[37m `\x1b[33m%s\x1b[37m`" + " is false in \x1b[36m%s:%d\x1b[37m\n", + message, file, line); exit(-1); } @@ -2120,10 +2155,13 @@ void io_dispatch(i16 op, i64 *id, i64 *size, void *data, void *user_data) { u16 *origin = (u16 *) data; if (!(*origin == IO_SEEK_CURSOR && *size == 0)) { - BX_ASSERT(*origin == IO_SEEK_CURSOR || *origin == IO_SEEK_BEGIN || *origin == IO_SEEK_END); - i32 s = fseek(*f, *size, *origin == IO_SEEK_CURSOR ? SEEK_CUR : - *origin == IO_SEEK_BEGIN ? SEEK_SET : - SEEK_END); + BX_ASSERT(*origin == IO_SEEK_CURSOR || + *origin == IO_SEEK_BEGIN || + *origin == IO_SEEK_END); + i32 s = fseek(*f, *size, + *origin == IO_SEEK_CURSOR ? SEEK_CUR : + *origin == IO_SEEK_BEGIN ? SEEK_SET : + SEEK_END); BX_ASSERT(s == 0); } } break; @@ -2254,7 +2292,7 @@ void l_static(i64 unit, c8 *static_library) { // ================================================================ // -// Example +// EXAMPLE // // ================================================================ |