vc3/link/link.h
2025-04-04 02:20:40 +02:00

58 lines
1.1 KiB
C

#pragma once
#include <stdint.h>
#include <stdio.h>
typedef enum {
Profile_Linked,
Profile_Shared,
Profile_Kern,
} Profile;
static const char* profile_strs[] = { "linked", "shared", "kern" };
typedef struct {
const char* output_file;
int input_files;
Profile profile;
} Args;
typedef struct {
int argc;
char** argv;
int files;
} FileIter;
const char* file_iter_next(FileIter* iter);
typedef struct {
uint16_t offset;
char* ident;
} HeaderGlobalSym;
typedef struct {
uint16_t id;
char* ident;
} HeaderExternSym;
typedef struct {
uint16_t id;
uint16_t offset;
} HeaderExternRef;
typedef struct {
uint16_t header_size;
uint16_t global_syms_size;
HeaderGlobalSym* global_syms;
uint16_t extern_syms_size;
HeaderExternSym* extern_syms;
uint16_t extern_refs_size;
HeaderExternRef* extern_refs;
uint16_t program_size;
} Header;
void header_destroy(Header* header);
int header_read_from(Header* header, FILE* fp, const char* filename);
void header_print(const Header* header);
int link_kern(const Args* args, FileIter input_files);