Skip to content

Commit

Permalink
fix: remove minor memory leaks + clean up correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
cyuria committed Jun 5, 2024
1 parent 74e81bf commit 415bf2b
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 15 deletions.
1 change: 1 addition & 0 deletions h/bytecode.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ int write_all_data(void);
int write_data(struct rawdata);

void free_instructions(void);
void free_data(void);
1 change: 1 addition & 0 deletions h/elf/output.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ int alloc_output(void);
size_t write_sectiondata(const void *, size_t, struct sectionpos);

int flush_output(FILE *);
void free_output(void);
2 changes: 1 addition & 1 deletion h/symbols.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ struct elf64sym create_symtab_entry(const char *);
size_t calc_symtab_str_buf_size(void);
char *create_symtab_str_buf(size_t);

void free_labels(void);
void free_symbols(void);
1 change: 1 addition & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ project(
'warning_level=3',
'b_lto=true',
'b_pie=true',
'optimization=3',
],
version: '0.0.1-alpha',
)
Expand Down
8 changes: 8 additions & 0 deletions src/bytecode.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,12 @@ void free_instructions(void)
{
free(instructions);
instructions = NULL;
instructions_size = 0;
}

void free_data(void)
{
free(dataitems);
dataitems = NULL;
dataitems_size = 0;
}
6 changes: 6 additions & 0 deletions src/elf/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,3 +255,9 @@ int flush_output(FILE *elf)

return 0;
}

void free_output(void)
{
for (int i = 0; i < SECTION_COUNT; i++)
free(outputsections[i].contents);
}
3 changes: 3 additions & 0 deletions src/form/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,9 @@ struct bytecode form_load_pseudo(const char *name, struct idata instruction,
memcpy(data, upper.data, upper.size);
memcpy(data + upper.size, lower.data, lower.size);

free(upper.data);
free(lower.data);

return (struct bytecode){
.size = upper.size + lower.size,
.data = data,
Expand Down
7 changes: 6 additions & 1 deletion src/generation.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,10 @@ void parse_file(FILE *ifp, FILE *ofp)

flush_output(ofp);

free_output();
free_instructions();
free_data();
free_symbols();
}

static int parse_line_trimmed(char *, struct sectionpos);
Expand Down Expand Up @@ -136,7 +139,9 @@ int symbol_forward_declare(char *line)
return 0;
*colon = '\0';
char *name = trim_whitespace(line);
return !create_symbol(name, SYMBOL_LABEL);
struct symbol *sym = create_symbol(name, SYMBOL_LABEL);
free(name);
return !sym;
}

int parse_label(char *line, struct sectionpos position)
Expand Down
12 changes: 0 additions & 12 deletions src/parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,18 +309,6 @@ struct args parse_stype(char *argstr)
logger(DEBUG, no_error, "Registers parsed %d(x%d), x%d", args.imm,
args.rs1, args.rs2);

free(first);
free(second);

logger(DEBUG, no_error, "Registers parsed x%d, x%d, %d", args.rs1,
args.rs2, args.imm);

free(first);
free(second);

logger(DEBUG, no_error, "Registers parsed x%d, x%d, %d", args.rs1,
args.rs2, args.imm);

return args;
}

Expand Down
2 changes: 1 addition & 1 deletion src/symbols.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ char *create_symtab_str_buf(size_t sz)
return buf;
}

void free_labels(void)
void free_symbols(void)
{
for (size_t hash = 0; hash < SYMBOLMAP_ENTRIES; hash++) {
for (size_t index = 0; index < symbols[hash].count; index++)
Expand Down

0 comments on commit 415bf2b

Please sign in to comment.