Ignore:
Timestamp:
Nov 7, 2017, 3:08:12 PM (4 years ago)
Author:
alain
Message:

First implementation of fork/exec.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/libk/elf.c

    r406 r407  
    175175                }
    176176
     177        // get .elf file descriptor cluster and local pointer
     178        cxy_t        file_cxy = GET_CXY( file_xp );
     179        vfs_file_t * file_ptr = (vfs_file_t *)GET_PTR( file_xp );
     180
     181        // get local pointer on .elf file mapper
     182        mapper_t * mapper_ptr = (mapper_t *)hal_remote_lpt( XPTR( file_cxy ,
     183                                                                  &file_ptr->mapper ) );
    177184                // register vseg in VMM
    178185                vseg = (vseg_t *)vmm_create_vseg( process,
     186                                          type,
    179187                                                  vbase,
    180188                                                  mem_size,
    181                                                   type );
     189                                          file_offset,
     190                                          file_size,
     191                                          XPTR( file_cxy , mapper_ptr ),
     192                                                  local_cxy ); 
    182193                if( vseg == NULL )
    183194                {
     
    187198                }
    188199
    189         // get .elf file descriptor cluster and local pointer
    190         cxy_t        file_cxy = GET_CXY( file_xp );
    191         vfs_file_t * file_ptr = (vfs_file_t *)GET_PTR( file_xp );
    192 
    193         // get local pointer on .elf file mapper
    194         mapper_t * mapper_ptr = (mapper_t *)hal_remote_lpt( XPTR( file_cxy ,
    195                                                                   &file_ptr->mapper ) );
    196 
    197         // initialize "file_mapper", "file_offset", "file_size" fields in vseg
    198         vseg->mapper_xp   = XPTR( file_cxy , mapper_ptr );
    199         vseg->file_offset = file_offset;
    200         vseg->file_size   = file_size;
    201 
    202200        // update reference counter in file descriptor
    203201                vfs_file_count_up( file_xp );
    204202
    205                 elf_dmsg("\n[DMSG] %s : found %s vseg / base = %x / size = %x\n"
     203                elf_dmsg("\n[DBG] %s : found %s vseg / base = %x / size = %x\n"
    206204                 "       file_size = %x / file_offset = %x / mapper_xp = %l\n",
    207205            __FUNCTION__ , vseg_type_str(vseg->type) , vseg->min , vseg->max - vseg->min ,
     
    225223        error_t      error;
    226224
    227     elf_dmsg("\n[DMSG] %s : core[%x,%d] enter for <%s>\n",
     225    elf_dmsg("\n[DBG] %s : core[%x,%d] enter for <%s>\n",
    228226    __FUNCTION__ , local_cxy , CURRENT_THREAD->core->lid , pathname );
    229227
     
    233231
    234232        // open file
    235         error = vfs_open( process->vfs_cwd_xp,
     233        error = vfs_open( process,
    236234                          pathname,
    237235                          O_RDONLY,
     
    245243        }
    246244
    247     elf_dmsg("\n[DMSG] %s : open file <%s>\n", __FUNCTION__ , pathname );
     245    elf_dmsg("\n[DBG] %s : open file <%s>\n", __FUNCTION__ , pathname );
    248246
    249247        // load header in local buffer
     
    258256        }
    259257
    260         elf_dmsg("\n[DMSG] %s : loaded elf header for %s\n", __FUNCTION__ , pathname );
     258        elf_dmsg("\n[DBG] %s : loaded elf header for %s\n", __FUNCTION__ , pathname );
    261259
    262260        if( header.e_phnum == 0 )
     
    295293        }
    296294
    297         elf_dmsg("\n[DMSG] %s : segments array allocated for %s\n", __FUNCTION__ , pathname );
     295        elf_dmsg("\n[DBG] %s : segments array allocated for %s\n", __FUNCTION__ , pathname );
    298296
    299297        // load seg descriptors array to local buffer
     
    312310        }
    313311
    314         elf_dmsg("\n[DMSG] %s loaded segments descriptors for %s \n", __FUNCTION__ , pathname );
     312        elf_dmsg("\n[DBG] %s loaded segments descriptors for %s \n", __FUNCTION__ , pathname );
    315313
    316314        // register loadable segments in process VMM
     
    337335        kmem_free(&req);
    338336
    339     elf_dmsg("\n[DMSG] %s : core[%x,%d] exit for <%s> / entry_point = %x\n",
     337    elf_dmsg("\n[DBG] %s : core[%x,%d] exit for <%s> / entry_point = %x\n",
    340338    __FUNCTION__ , local_cxy , CURRENT_THREAD->core->lid , pathname , header.e_entry );
    341339
Note: See TracChangeset for help on using the changeset viewer.