|
libspe2 0.9a
|
#include <fcntl.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include "elf_loader.h"#include "create.h"#include "spebase.h"
Go to the source code of this file.
Defines | |
| #define | SPE_EMULATED_LOADER_FILE "/usr/lib/spe/emulated-loader.bin" |
Functions | |
| void | _base_spe_program_load_complete (spe_context_ptr_t spectx) |
| int | _base_spe_emulated_loader_present (void) |
| int | _base_spe_program_load (spe_context_ptr_t spe, spe_program_handle_t *program) |
| #define SPE_EMULATED_LOADER_FILE "/usr/lib/spe/emulated-loader.bin" |
| int _base_spe_emulated_loader_present | ( | void | ) |
Check if the emulated loader is present in the filesystem
Definition at line 159 of file load.c.
References _base_spe_verify_spe_elf_image().
Referenced by _base_spe_context_create().
{
spe_program_handle_t *loader = emulated_loader_program();
if (!loader)
return 0;
return !_base_spe_verify_spe_elf_image(loader);
}

| int _base_spe_program_load | ( | spe_context_ptr_t | spectx, |
| spe_program_handle_t * | program | ||
| ) |
_base_spe_program_load loads an ELF image into a context
| spectx | Specifies the SPE context |
| program | handle to the ELF image |
Definition at line 203 of file load.c.
References _base_spe_load_spe_elf(), _base_spe_program_load_complete(), spe_context::base_private, DEBUG_PRINTF, spe_context_base_priv::emulated_entry, spe_ld_info::entry, spe_context_base_priv::entry, spe_context_base_priv::flags, spe_context_base_priv::loaded_program, spe_context_base_priv::mem_mmap_base, SPE_ISOLATE, and SPE_ISOLATE_EMULATE.
{
int rc = 0;
struct spe_ld_info ld_info;
spe->base_private->loaded_program = program;
if (spe->base_private->flags & SPE_ISOLATE) {
rc = spe_start_isolated_app(spe, program);
} else if (spe->base_private->flags & SPE_ISOLATE_EMULATE) {
rc = spe_start_emulated_isolated_app(spe, program, &ld_info);
} else {
rc = _base_spe_load_spe_elf(program,
spe->base_private->mem_mmap_base, &ld_info);
if (!rc)
_base_spe_program_load_complete(spe);
}
if (rc != 0) {
DEBUG_PRINTF ("Load SPE ELF failed..\n");
return -1;
}
spe->base_private->entry = ld_info.entry;
spe->base_private->emulated_entry = ld_info.entry;
return 0;
}

| void _base_spe_program_load_complete | ( | spe_context_ptr_t | spectx | ) |
Register the SPE program's start address with the oprofile and gdb, by writing to the object-id file.
Definition at line 38 of file load.c.
References __spe_context_update_event(), spe_context::base_private, DEBUG_PRINTF, spe_program_handle::elf_image, spe_context_base_priv::fd_spe_dir, and spe_context_base_priv::loaded_program.
Referenced by _base_spe_context_run(), and _base_spe_program_load().
{
int objfd, len;
char buf[20];
spe_program_handle_t *program;
program = spectx->base_private->loaded_program;
if (!program || !program->elf_image) {
DEBUG_PRINTF("%s called, but no program loaded\n", __func__);
return;
}
objfd = openat(spectx->base_private->fd_spe_dir, "object-id", O_RDWR);
if (objfd < 0)
return;
len = sprintf(buf, "%p", program->elf_image);
write(objfd, buf, len + 1);
close(objfd);
__spe_context_update_event();
}

1.7.4