Пример #1
0
DR_EXPORT void
dr_client_main(client_id_t id, int argc, const char *argv[])
{
    uint i;

    dr_set_client_name("DynamoRIO Sample Client 'stats'", "http://dynamorio.org/issues");
    my_id = id;
    /* Make it easy to tell by looking at the log which client executed. */
    dr_log(NULL, LOG_ALL, 1, "Client 'stats' initializing\n");

    if (!drmgr_init())
        DR_ASSERT(false);
    drx_init();

    stats = shared_memory_init();
    memset(stats, 0, sizeof(stats));
    stats->num_stats = NUM_STATS;
    stats->pid = dr_get_process_id();
    for (i=0; i<NUM_STATS; i++) {
        strncpy(stats->names[i], stat_names[i], CLIENTSTAT_NAME_MAX_LEN);
        stats->names[i][CLIENTSTAT_NAME_MAX_LEN-1] = '\0';
    }
    dr_register_exit_event(event_exit);
    if (!drmgr_register_bb_instrumentation_event(event_analyze_bb,
                                                 event_insert_instrumentation, NULL))
        DR_ASSERT(false);
}
Пример #2
0
/*
 * stats_create
 *
 * Create and initialize a stats object.  The resources needed for the stats
 * (files, shared memory, semaphore, etc) are not opened yet. The stats_open
 * call must be invoked.
 *
 * If stats_create returns a stats object, you must call stats_free on it
 * to releaseall memory used by the stats object.
 *
 * Returns:
 *    S_OK                              - success
 *    ERROR_INVALID_PARAMETERS          - the name was too long
 *    ERROR_MEMORY                      - out of memory / memory allocation error
 */
int stats_create(const char *name, struct stats **stats_out)
{
    struct stats * stats = NULL;
    int err;
    char lock_name[SEMAPHORE_MAX_NAME_LEN+1];
    char mem_name[SHARED_MEMORY_MAX_NAME_LEN];

    /* printf("Sizeof stats counter is %ld\n",sizeof(struct stats_counter)); */
    assert(sizeof(struct stats_header) == 16);
    assert(sizeof(struct stats_counter) == 56);

    if (stats_out == NULL)
        return ERROR_INVALID_PARAMETERS;

    /* check that the length of the name plus the extension we are adding is not too long */
    if (strlen(name) + 4 > SEMAPHORE_MAX_NAME_LEN)
        return ERROR_INVALID_PARAMETERS;
    if (strlen(name) + 4 > SHARED_MEMORY_MAX_NAME_LEN)
        return ERROR_INVALID_PARAMETERS;

    strcpy(lock_name,name);
    strcat(lock_name,".sem");
    strcpy(mem_name,name);
    strcat(mem_name,".mem");

    stats = (struct stats *) malloc(sizeof(struct stats));
    if (stats == NULL)
    {
        err = ERROR_MEMORY;
        goto fail;
    }

    stats->magic = STATS_MAGIC;
    stats->data = NULL;

    err = lock_init(&stats->lock, lock_name);
    if (err != S_OK)
        goto fail;

    err = shared_memory_init(&stats->shmem, mem_name, OMODE_OPEN_OR_CREATE | DESTROY_ON_CLOSE_IF_LAST, sizeof(struct stats_data));
    if (err != S_OK)
        goto fail;

    err = S_OK;
    goto ok;

fail:
    if (stats)
    {
        free(stats);
        stats = NULL;
    }

ok:
    *stats_out = stats;
    return err;
}
Пример #3
0
int main(void)
{

#ifndef NO_DEBUG
    uart_init();
    stdout = &uart_stdout;
    banner();
#endif
    shared_memory_init();
    system_init();
    sram_init();
    pwm_init();
    irq_init();
    boot_startup_rom(50);
    globals_init();
    pwm_stop();
    usbInit();
    usb_connect();
    sei();
    while (1) {
        system_set_bus_avr();
        system_set_wr_disable();
        while (usb_trans.req_state != REQ_STATUS_SNES) {
            usbPoll();
#if DO_SHELL
#ifndef NO_DEBUG
            shell_run();
#endif
#endif
        }

#if DO_SHM
        shared_memory_write(SHARED_MEM_TX_CMD_TERMINATE, 0);
#endif

#if DO_SHM_SCRATCHPAD
        shared_memory_scratchpad_region_tx_restore();
        shared_memory_scratchpad_region_rx_restore();
#endif

#if DO_CRC_CHECK
        info_P(PSTR("-->CRC Check\n"));
        crc_check_bulk_memory(0x000000,
                              usb_trans.req_bank_size * usb_trans.req_bank_cnt,
                              usb_trans.req_bank_size);
#endif

        system_set_rom_mode(&usb_trans);
        system_set_wr_disable();
        system_set_bus_snes();
        system_send_snes_reset();
        irq_stop();
        while ((usb_trans.req_state != REQ_STATUS_AVR)) {
            usbPoll();
#if DO_SHELL
#ifndef NO_DEBUG
            shell_run();
#endif
#endif
        }
        info_P(PSTR("-->Switch TO AVR\n"));
        shared_memory_init();
        irq_init();
        if (usb_trans.loader_enabled) {
            boot_startup_rom(50);
        } else {
            system_set_bus_avr();
            system_send_snes_reset();
        }
        globals_init();
    }
    return 0;
}