|
@@ -396,37 +396,42 @@ fail:
|
|
|
}
|
|
|
|
|
|
/* return < 0 if error, otherwise the number of bytes loaded in memory */
|
|
|
-int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t),
|
|
|
+int load_elf(const char *filename,
|
|
|
+ uint64_t (*elf_note_fn)(void *, void *, bool),
|
|
|
+ uint64_t (*translate_fn)(void *, uint64_t),
|
|
|
void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr,
|
|
|
uint64_t *highaddr, int big_endian, int elf_machine,
|
|
|
int clear_lsb, int data_swab)
|
|
|
{
|
|
|
- return load_elf_as(filename, translate_fn, translate_opaque, pentry,
|
|
|
- lowaddr, highaddr, big_endian, elf_machine, clear_lsb,
|
|
|
- data_swab, NULL);
|
|
|
+ return load_elf_as(filename, elf_note_fn, translate_fn, translate_opaque,
|
|
|
+ pentry, lowaddr, highaddr, big_endian, elf_machine,
|
|
|
+ clear_lsb, data_swab, NULL);
|
|
|
}
|
|
|
|
|
|
/* return < 0 if error, otherwise the number of bytes loaded in memory */
|
|
|
int load_elf_as(const char *filename,
|
|
|
+ uint64_t (*elf_note_fn)(void *, void *, bool),
|
|
|
uint64_t (*translate_fn)(void *, uint64_t),
|
|
|
void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr,
|
|
|
uint64_t *highaddr, int big_endian, int elf_machine,
|
|
|
int clear_lsb, int data_swab, AddressSpace *as)
|
|
|
{
|
|
|
- return load_elf_ram(filename, translate_fn, translate_opaque,
|
|
|
+ return load_elf_ram(filename, elf_note_fn, translate_fn, translate_opaque,
|
|
|
pentry, lowaddr, highaddr, big_endian, elf_machine,
|
|
|
clear_lsb, data_swab, as, true);
|
|
|
}
|
|
|
|
|
|
/* return < 0 if error, otherwise the number of bytes loaded in memory */
|
|
|
int load_elf_ram(const char *filename,
|
|
|
+ uint64_t (*elf_note_fn)(void *, void *, bool),
|
|
|
uint64_t (*translate_fn)(void *, uint64_t),
|
|
|
void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr,
|
|
|
uint64_t *highaddr, int big_endian, int elf_machine,
|
|
|
int clear_lsb, int data_swab, AddressSpace *as,
|
|
|
bool load_rom)
|
|
|
{
|
|
|
- return load_elf_ram_sym(filename, translate_fn, translate_opaque,
|
|
|
+ return load_elf_ram_sym(filename, elf_note_fn,
|
|
|
+ translate_fn, translate_opaque,
|
|
|
pentry, lowaddr, highaddr, big_endian,
|
|
|
elf_machine, clear_lsb, data_swab, as,
|
|
|
load_rom, NULL);
|
|
@@ -434,6 +439,7 @@ int load_elf_ram(const char *filename,
|
|
|
|
|
|
/* return < 0 if error, otherwise the number of bytes loaded in memory */
|
|
|
int load_elf_ram_sym(const char *filename,
|
|
|
+ uint64_t (*elf_note_fn)(void *, void *, bool),
|
|
|
uint64_t (*translate_fn)(void *, uint64_t),
|
|
|
void *translate_opaque, uint64_t *pentry,
|
|
|
uint64_t *lowaddr, uint64_t *highaddr, int big_endian,
|
|
@@ -476,11 +482,13 @@ int load_elf_ram_sym(const char *filename,
|
|
|
|
|
|
lseek(fd, 0, SEEK_SET);
|
|
|
if (e_ident[EI_CLASS] == ELFCLASS64) {
|
|
|
- ret = load_elf64(filename, fd, translate_fn, translate_opaque, must_swab,
|
|
|
+ ret = load_elf64(filename, fd, elf_note_fn,
|
|
|
+ translate_fn, translate_opaque, must_swab,
|
|
|
pentry, lowaddr, highaddr, elf_machine, clear_lsb,
|
|
|
data_swab, as, load_rom, sym_cb);
|
|
|
} else {
|
|
|
- ret = load_elf32(filename, fd, translate_fn, translate_opaque, must_swab,
|
|
|
+ ret = load_elf32(filename, fd, elf_note_fn,
|
|
|
+ translate_fn, translate_opaque, must_swab,
|
|
|
pentry, lowaddr, highaddr, elf_machine, clear_lsb,
|
|
|
data_swab, as, load_rom, sym_cb);
|
|
|
}
|