diff options
author | Freya Murphy <freya@freyacat.org> | 2024-09-13 11:11:18 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-09-13 11:11:18 -0400 |
commit | df4a225ccf79dd9f5fa3faef4fd68ae87471f0ca (patch) | |
tree | 44629775a57e229024f56d087ab5d1aebed978d3 /masm/asm.c | |
parent | dont upload those :p (diff) | |
download | mips-df4a225ccf79dd9f5fa3faef4fd68ae87471f0ca.tar.gz mips-df4a225ccf79dd9f5fa3faef4fd68ae87471f0ca.tar.bz2 mips-df4a225ccf79dd9f5fa3faef4fd68ae87471f0ca.zip |
better
Diffstat (limited to 'masm/asm.c')
-rw-r--r-- | masm/asm.c | 28 |
1 files changed, 11 insertions, 17 deletions
@@ -247,24 +247,15 @@ static int handle_ins(struct assembler *assembler, if (sec_push(sec, entry)) return M_ERROR; - unsigned char type = 0; - switch (ref->type) { - case REF_NONE: + if (ref->type == R_MIPS_NONE) continue; - case REF_OFFESET: - type = R_MIPS_PC16; - break; - case REF_TARGET: - type = R_MIPS_26; - break; - } size_t symidx; if (find_symbol_or_stub(assembler, ref->name, NULL, &symidx)) return M_ERROR; Elf32_Rela rel = { - .r_info = htonl(ELF32_R_INFO(symidx, type)), + .r_info = htonl(ELF32_R_INFO(symidx, ref->type)), .r_addend = htonl(ref->addend), .r_offset = htonl(sec_index(sec, secidx + i)), }; @@ -543,7 +534,7 @@ static void update_offsets(struct assembler *assembler, Elf32_Ehdr *ehdr) } // sections - size_t v_addr = 0x00400000; + size_t v_addr = 0; for (uint32_t i = 0; i < assembler->sectab.len; i++) { struct section *sec = &assembler->sectab.sections[i]; uint32_t idx = sec->shdr_idx; @@ -631,11 +622,14 @@ static int write_file(struct assembler *assembler, Elf32_Ehdr *ehdr, for (uint32_t j = 0; j < sec->len; j++) { struct section_entry *entry = &sec->entries[j]; size_t size = entry->size; - fwrite(&entry->data, size, 1, out); - while(size % sec->alignment) { - uint8_t zero = 0; - fwrite(&zero, 1, 1, out); - size++; + size_t zeros = size % sec->alignment;; + if (entry->type != ENT_NO_DATA) + fwrite(&entry->data, size, 1, out); + else + zeros += size; + while(zeros) { + fputc(0, out); + zeros--; } } } |