Ignore:
Timestamp:
Jul 17, 2017, 8:42:59 AM (7 years ago)
Author:
alain
Message:

Bug fix in kernel_init
-This line, and those below, will be ignored--

M params.mk
M kernel_config.h
M Makefile
M hdd/virt_hdd.dmg
M tools/bootloader_tsar/boot.c
M kernel/libk/bits.h
M kernel/libk/elf.c
M kernel/libk/xhtab.c
M kernel/libk/elf.h
M kernel/libk/xhtab.h
M kernel/devices/dev_pic.c
M kernel/mm/vmm.c
M kernel/mm/mapper.c
M kernel/mm/mapper.h
M kernel/vfs/devfs.h
M kernel/vfs/vfs.c
M kernel/vfs/vfs.h
M kernel/vfs/devfs.c
M kernel/kern/chdev.h
M kernel/kern/kernel_init.c
M kernel/kern/process.c
M kernel/kern/process.h
M hal/tsar_mips32/core/hal_remote.c
M hal/tsar_mips32/drivers/soclib_pic.c

File:
1 edited

Legend:

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

    r157 r204  
    7575///////////////////////////////////////////////////////////////////////////////////////
    7676// This function loads the .elf header in the buffer allocated by the caller.
     77///////////////////////////////////////////////////////////////////////////////////////
    7778// @ file   : extended pointer on the remote file descriptor.
    7879// @ buffer : pointer on buffer allocated by the caller.
    7980// @ size   : number of bytes to read.
    8081///////////////////////////////////////////////////////////////////////////////////////
    81 static error_t elf_header_read( xptr_t   file_xp,
     82static error_t elf_header_load( xptr_t   file_xp,
    8283                                void   * buffer,
    8384                                uint32_t size )
     
    114115        }
    115116        return 0;
    116 }
     117
     118} // end elf_header_load()
    117119
    118120///////////////////////////////////////////////////////////////////////////////////////
    119121// This function registers in the process VMM the CODE and DATA segments.
     122///////////////////////////////////////////////////////////////////////////////////////
    120123// @ file      : extended pointer on the remote file descriptor.
    121124// @ segs_base : local pointer on buffer containing the segments descriptors array
     
    212215
    213216        return 0;
    214 }
     217
     218} // end elf_segments_load()
    215219
    216220///////////////////////////////////////////////
     
    218222                          process_t * process)
    219223{
    220         char         path_copy[CONFIG_VFS_MAX_PATH_LENGTH];
    221224        kmem_req_t   req;              // kmem request for program header
    222         uint32_t     length;           // actual path length
    223225        Elf32_Ehdr   header;           // local buffer for .elf header
    224226        void       * segs_base;        // pointer on buffer for segment descriptors array
     
    229231        error_t      error;
    230232
    231         // get path length from user space
    232         length = hal_strlen_from_uspace( pathname );
    233 
    234         if( length >= CONFIG_VFS_MAX_PATH_LENGTH )
    235         {
    236                 printk("\n[ERROR] in %s : pathname length too long\n", __FUNCTION__ );
    237                 return -1;
    238         }
    239 
    240         // make a local copy for pathname
    241         hal_copy_from_uspace( path_copy , pathname , length+1 );
     233    elf_dmsg("\n[INFO] %s : enter for %s\n", __FUNCTION__ , pathname );
     234
     235    // avoid GCC warning
     236        file_xp = XPTR_NULL; 
     237        file_id = -1;
    242238
    243239        // open file
    244         file_xp = XPTR_NULL;  // avoid GCC warning
    245         file_id = -1;
    246 
    247240        error = vfs_open( process->vfs_cwd_xp,
    248                           path_copy,
     241                          pathname,
    249242                          O_RDONLY,
    250243                          0,
     
    253246        if( error )
    254247        {
    255                 printk("\n[ERROR] in %s : failed to open executable file %s\n",
    256                        __FUNCTION__ , path_copy );
    257                 return -1;
    258         }
     248                printk("\n[ERROR] in %s : failed to open file %s\n", __FUNCTION__ , pathname );
     249                return -1;
     250        }
     251
     252    elf_dmsg("\n[INFO] %s : file %s open\n", __FUNCTION__ , pathname );
    259253
    260254        // load header in local buffer
    261         error = elf_header_read( file_xp ,
     255        error = elf_header_load( file_xp ,
    262256                                 &header,
    263257                                 sizeof(Elf32_Ehdr) );
    264258        if( error )
    265259        {
    266                 vfs_close( file_xp , file_id );
    267                 return -1;
    268         }
    269 
    270         elf_dmsg("\n[INFO] %s loaded elf header for %s\n", __FUNCTION__ , path_copy );
     260                printk("\n[ERROR] in %s : cannot get header file %s\n", __FUNCTION__ , pathname );
     261                vfs_close( file_xp , file_id );
     262                return -1;
     263        }
     264
     265        elf_dmsg("\n[INFO] %s : loaded elf header for %s\n", __FUNCTION__ , pathname );
    271266
    272267        if( header.e_phnum == 0 )
     
    320315        }
    321316
    322         elf_dmsg("\n[INFO] %s loaded segments descriptors for %s \n", __FUNCTION__ , path_copy );
     317        elf_dmsg("\n[INFO] %s loaded segments descriptors for %s \n", __FUNCTION__ , pathname );
    323318
    324319        // register loadable segments in process VMM
     
    346341
    347342        elf_dmsg("\n[INFO] %s successfully completed / entry point = %x for %s]\n",
    348                  __FUNCTION__, (uint32_t) header.e_entry , path_copy );
     343                 __FUNCTION__, (uint32_t) header.e_entry , pathname );
    349344
    350345        return 0;
    351 }
    352 
     346
     347}  // end elf_load_process()
     348
Note: See TracChangeset for help on using the changeset viewer.