]> git.sesse.net Git - pistorm/blob - platforms/amiga/hunk-reloc.h
8cb8c79c6bfc484ef5bdb021ba0b53b9df78190e
[pistorm] / platforms / amiga / hunk-reloc.h
1 #ifndef _HUNK_RELOC_H
2 #define _HUNK_RELOC_H
3
4 struct hunk_reloc {
5     uint32_t src_hunk;
6     uint32_t target_hunk;
7     uint32_t offset;
8 };
9
10 struct hunk_info {
11     uint16_t current_hunk;
12     uint16_t num_libs;
13     uint8_t *libnames[256];
14     uint32_t table_size, byte_size, alloc_size;
15     uint32_t base_offset;
16     uint32_t first_hunk, last_hunk, num_hunks;
17     uint32_t reloc_hunks;
18     uint32_t *hunk_offsets;
19     uint32_t *hunk_sizes;
20 };
21
22 enum hunk_types {
23     HUNKTYPE_CODE = 0x3E9,
24     HUNKTYPE_DATA = 0x3EA,
25     HUNKTYPE_BSS = 0x3EB,
26     HUNKTYPE_HUNK_RELOC32 = 0x3EC,
27     HUNKTYPE_SYMBOL = 0x3F0,
28     HUNKTYPE_END = 0x3F2,
29     HUNKTYPE_HEADER = 0x3F3,
30 };
31
32 int process_hunk(uint32_t index, struct hunk_info *info, FILE *f, struct hunk_reloc *r);
33 int load_lseg(int fd, uint8_t **buf_p, struct hunk_info *i, struct hunk_reloc *relocs, uint32_t block_size);
34
35 void reloc_hunk(struct hunk_reloc *h, uint8_t *buf, struct hunk_info *i);
36 void process_hunks(FILE *in, struct hunk_info *h_info, struct hunk_reloc *r, uint32_t offset);
37 void reloc_hunks(struct hunk_reloc *r, uint8_t *buf, struct hunk_info *h_info);
38
39 #endif /* _HUNK_RELOC_H */