コード例 #1
0
ファイル: context.c プロジェクト: 3upperm2n/gpuSimulators
void X86ContextCreateAndFork(X86Context *self, X86Context *forked)
{
	/* Initialize baseline contect */
	X86ContextDoCreate(self, forked->emu);

	/* Copy registers */
	x86_regs_copy(self->regs, forked->regs);

	/* Memory */
	self->address_space_index = self->emu->address_space_index++;
	self->mem = mem_create();
	self->spec_mem = spec_mem_create(self->mem);
	mem_clone(self->mem, forked->mem);

	/* Loader */
	self->loader = x86_loader_link(forked->loader);

	/* Signal handlers and file descriptor table */
	self->signal_handler_table = x86_signal_handler_table_create();
	self->file_desc_table = x86_file_desc_table_create();

	/* Libc segment */
	self->glibc_segment_base = forked->glibc_segment_base;
	self->glibc_segment_limit = forked->glibc_segment_limit;

	/* Set parent */
	self->parent = forked;
}
コード例 #2
0
ファイル: test_mem.c プロジェクト: alexplong/biopieces
void test_mem_clone()
{
    fprintf( stderr, "   Testing mem_clone ... " );

    char   *pt;
    char   *pt_clone;
    size_t  pt_size = 10000;
    size_t  i;

    pt = mem_get( pt_size );

    memset( pt, 'X', pt_size );

    pt_clone = mem_clone( pt, pt_size );

    assert( pt_clone != pt );
    assert( &pt_clone != &pt );

    for ( i = 0; i < pt_size; i++ ) {
        assert( pt[ i ] == pt_clone[ i ] );
    }

    mem_free( ( void * ) &pt );
    mem_free( ( void * ) &pt_clone );

    fprintf( stderr, "OK\n" );
}
コード例 #3
0
ファイル: ucsc.c プロジェクト: alexplong/biopieces
list_sl *bed_entries_get( char *path, const int cols )
{
    /* Martin A. Hansen, September 2008 */

    /* Get a singly linked list with all BED entries (of a given number of coluns */
    /* from a specified file. */

    list_sl   *list     = list_sl_new();
    node_sl   *node     = node_sl_new();
    node_sl   *old_node = NULL;
    bed_entry *entry    = NULL;
    FILE      *fp       = NULL;
    
    entry = bed_entry_new( cols );

    fp = read_open( path );

    if ( ( bed_entry_get( fp, &entry ) ) )
    {
        node->val = mem_clone( entry, sizeof( bed_entry ) );
    
        list_sl_add_beg( &list, &node );

        old_node = node;
    }

    while ( ( bed_entry_get( fp, &entry ) ) )
    {
        node = node_sl_new();

        node->val = mem_clone( entry, sizeof( bed_entry ) );

        list_sl_add_after( &old_node, &node );

        old_node = node;
    }

    close_stream( fp );

    return list;
}
コード例 #4
0
ファイル: flat.c プロジェクト: 8l/FUZIX
int pagemap_alloc(ptptr p)
{
	unsigned int proc = udata.u_page;
	unsigned int nproc = p - ptab;

	p->p_page = nproc;
	/* Init is special */
	if (p->p_pid == 1) {
		store[nproc] = mem_alloc();
		store[nproc]->last = p;
		mem[nproc] = store[nproc];
		return 0;
	}
	/* Allocate memory for the old process as a copy of the new as the
	   new will run first. We know that mem[proc] = store[proc] as proc
	   is running the fork() */
	store[proc] = mem_clone(mem[proc]);
	if (store[proc] == NULL)
		return ENOMEM;
	mem[nproc] = mem[proc];
	/* Last for our child is us */
	store[nproc]->last = udata.u_ptab;
	return 0;
}