summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2024-11-24 04:24:57 +0100
committerMitya Selivanov <automainint@guattari.tech>2024-11-24 04:24:57 +0100
commit46a3f595a4f86acbf6abc47e177327416ff498a6 (patch)
tree65cd6ab0b5837f3c010d9332d7fd4aad8035dc43
parentfbcd3f6f87cefd4cd621ab4c5cb518f410189e53 (diff)
downloadbxgen-46a3f595a4f86acbf6abc47e177327416ff498a6.zip
Update comments
-rwxr-xr-xbxgen.c76
1 files changed, 19 insertions, 57 deletions
diff --git a/bxgen.c b/bxgen.c
index 9489cd4..7e2dd05 100755
--- a/bxgen.c
+++ b/bxgen.c
@@ -131,7 +131,6 @@ exit $? # */
// Types
//
// ================================================================
-
#ifndef TYPES_HEADER_GUARD_
#define TYPES_HEADER_GUARD_
@@ -150,22 +149,14 @@ typedef float f32;
typedef double f64;
#endif // TYPES_HEADER_GUARD_
-
// ================================================================
//
-// Version
+// IR data declarations
//
// ================================================================
-
#ifndef BXGEN_HEADER_GUARD_
#define BXGEN_HEADER_GUARD_
-// ================================================================
-//
-// IR data declarations
-//
-// ================================================================
-
enum {
// Log level
ERROR = 1,
@@ -423,18 +414,11 @@ typedef struct {
Chunk_Handle rels;
Chunk_Handle output_buffer;
} Linker_Context;
-
// ================================================================
//
// API declarations
//
// ================================================================
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ================================================================
//
// Hooks
//
@@ -442,14 +426,19 @@ extern "C" {
// Shoud be implemented on the user side.
// See: `* Helper procedures`
//
+// ================================================================
+#ifdef __cplusplus
+extern "C" {
+#endif
+
void dispatch_assert(b8 condition, c8 *message, u32 line, c8 *file);
void dispatch_log(i32 log_level, u32 line, c8 *file, c8 *format, ...);
void dispatch_io(u16 op, i64 *id, i64 *size, void *data, void *user_data);
-
// ================================================================
//
// Main API
//
+// ================================================================
i64 pool_add(Pool *pool, Entity data);
void pool_remove(Pool *pool, i64 entity, u16 type);
@@ -491,11 +480,11 @@ i64 io_tell(i64 f, void *user_data);
i64 io_read(i64 f, i64 size, void *data, void *user_data);
i64 io_write(i64 f, i64 size, void *data, void *user_data);
void io_chmod_exe(i64 f, void *user_data);
-
// ================================================================
//
// Helpers API
//
+// ================================================================
#ifndef DISABLE_HELPERS
i64 n_ref(i64 proc, i64 node);
@@ -531,29 +520,24 @@ c8 * l_find(c8 *name, b8 silent);
#define N_RET(proc, ...) n_ret((proc), ARGS(__VA_ARGS__))
#endif
-// ================================================================
#ifdef __cplusplus
}
#endif
#endif // BXGEN_HEADER_GUARD_
-
// ================================================================
//
// IMPLEMENTATION
//
// ================================================================
-
-#ifndef BXGEN_HEADER
-#ifndef BXGEN_IMPL_GUARD_
-#define BXGEN_IMPL_GUARD_
-
-// ================================================================
//
// Compilation options
//
// ================================================================
+#ifndef BXGEN_HEADER
+#ifndef BXGEN_IMPL_GUARD_
+#define BXGEN_IMPL_GUARD_
#ifdef __cplusplus
#error Implementation code should be compiled with a C compiler!
@@ -580,13 +564,11 @@ c8 * l_find(c8 *name, b8 silent);
#endif
#define VERSION "dev"
-
// ================================================================
//
// * Basic utilities
//
// ================================================================
-
#ifndef NULL
#define NULL ((void *) 0)
#endif
@@ -757,13 +739,11 @@ u64 u64_from_dec_str(c8 *s, c8 *s_end) {
LAX(s == s_end || *s == ' ' || *s == '\0', "Parsing failed");
return x;
}
-
// ================================================================
//
-// * Chunk table
+// * Chunk table and entity pool
//
// ================================================================
-
Chunk_Handle chunk_add(Pool *pool, i64 size, void *data) {
CHECK(pool != NULL, "Invalid arguments", (Chunk_Handle) {0});
CHECK(size > 0, "Invalid arguments", (Chunk_Handle) {0});
@@ -855,15 +835,6 @@ b8 entity_enabled(Pool *pool, i64 id) {
return entities[id].is_enabled;
}
-// ================================================================
-//
-// * Semantic graph
-//
-// ================================================================
-
-// IR building procs
-//
-
i64 pool_add(Pool *pool, Entity data) {
CHECK(pool != NULL && pool->data != NULL, "Invalid arguments", UNDEFINED);
@@ -898,7 +869,11 @@ void pool_remove(Pool *pool, i64 entity, u16 type) {
entities[entity] = (Entity) {0};
}
-
+// ================================================================
+//
+// * Semantic graph
+//
+// ================================================================
Node *node_by_id(Pool *pool, i64 id) {
CHECK(pool != NULL && pool->data != NULL, "Invalid arguments", NULL);
@@ -1274,7 +1249,6 @@ void unit_set_entry_point(Pool *pool, i64 unit, i64 entry_point_proc) {
u->entry_point_index = p->index_in_unit;
}
-
// ================================================================
//
// * Serialization
@@ -1293,7 +1267,6 @@ void unit_set_entry_point(Pool *pool, i64 unit, i64 entry_point_proc) {
// qword = 8 bytes
//
// ================================================================
-
enum {
BIT_LE = 0,
BIT_BE = 1,
@@ -1587,7 +1560,6 @@ void write_f64(u32 ordering, f64 x, void *v, void *v_end) {
// Shortcuts
#define HO host_data_ordering()
-
// ================================================================
//
// * Code generation and linking
@@ -1629,7 +1601,6 @@ void write_f64(u32 ordering, f64 x, void *v, void *v_end) {
// TODO Experiment with mapping several p_vaddr into one p_paddr.
//
// ================================================================
-
enum {
OS_Unknown = 0,
OS_Unix,
@@ -1915,12 +1886,11 @@ typedef struct {
u32 type;
i64 addent;
} Elf_Relx_Entry;
-
// ================================================================
//
// Codegen
//
-
+// ================================================================
void codegen_add_rel(Pool *pool, Codegen_Context *codegen, Codegen_Rel_Entry rel) {
CHECK(pool != NULL, "Invalid arguments",);
CHECK(codegen != NULL, "Invalid arguments",);
@@ -2301,7 +2271,6 @@ void x86_64_emit_node(
break;
case 2:
- // FAIL("Not implemented",);
// ebx
write_u8(LE, 0x89, begin, end); // mov ecx
@@ -2441,7 +2410,6 @@ void x86_64_emit_node(
break;
case 2:
- // FAIL("Not implemented",);
// ebx
write_u8(LE, 0x89, begin, end); // mov edx
@@ -2516,7 +2484,6 @@ void x86_64_emit_node(
break;
case 3:
- // FAIL("Not implemented",);
// ecx
write_u8(LE, 0x01, begin, end); // add edx
@@ -3314,12 +3281,11 @@ void emit_unit(Pool *pool, Codegen_Context *codegen, i64 unit, u16 arch) {
emit_proc(pool, codegen, procs[i], arch, context);
}
}
-
// ================================================================
//
// Linking
//
-
+// ================================================================
void link_add_symbol(Pool *pool, Linker_Context *linker, Link_Sym_Entry sym) {
CHECK(pool != NULL, "Invalid arguments",);
CHECK(linker != NULL, "Invalid arguments",);
@@ -5039,13 +5005,11 @@ i64 io_write(i64 f, i64 size, void *data, void *user_data) {
void io_chmod_exe(i64 f, void *user_data) {
dispatch_io(IO_CHMOD_EXE, &f, NULL, NULL, user_data);
}
-
// ================================================================
//
// * Helper procedures
//
// ================================================================
-
#if HELPERS
#include <stdio.h>
@@ -5432,13 +5396,11 @@ c8 *l_find(c8 *name, b8 silent) {
}
#endif
-
// ================================================================
//
// TEST SUITE
//
// ================================================================
-
#if TESTING
#if HELPERS