load.h File Reference

#include <libc.h>

Go to the source code of this file.

Defines

#define __CONVEN_LOAD_H__   1
#define LOADOPT_BOOTFS   (1<<0u)
#define LOADOPT_AS_IS   (1<<3u)
#define LOADOPT_WRITABLE_TEXT   (1<<4u)
#define LOADOPT_VERBOSE   (1<<10u)

Enumerations

enum  t_load_status {
  LOAD_EZERO = 0, LOAD_BOOTFS_VRSV = 100, LOAD_BOOTFS_MAP, LOAD_BOOTFS_FIND_FILE,
  LOAD_BOOTFS_UNMAP, LOAD_BOOTFS_VRELE, LOAD_BOOTFS_PRSV_ARCHIVE, LOAD_BOOTFS_BUSY,
  LOAD_BOOTFS_SHARE_ARCHIVE, LOAD_FS_OPEN_FAILED = 150, LOAD_FS_PRSV_ARCHIVE, LOAD_FS_CLOSE_FAILED,
  LOAD_FS_READ_FAILED, LOAD_FS_FSTAT_FAILED, LOAD_FS_SHORT_READ, LOAD_FS_PGIVE_ARCHIVE,
  LOAD_FS_VRSV_ARCHIVE, LOAD_FS_VMAP_ARCHIVE, LOAD_FS_VUNMAP_ARCHIVE, LOAD_FS_VRELE_ARCHIVE,
  LOAD_FS_PROP_FETCH_PATH = 180, LOAD_FS_PROP_STORE_PATH, LOAD_FS_PROP_UPDATE_PATH, LOAD_FS_PROP_STORE_SECTION,
  LOAD_ARCHIVE_VRSV = 200, LOAD_ARCHIVE_VMAP, LOAD_ARCHIVE_VUNMAP, LOAD_ARCHIVE_VRELE,
  LOAD_ARCHIVE_WIRE, LOAD_ARCHIVE_PRELE, LOAD_ELF_RETRIEVE_HDR = 300, LOAD_ELF_RETRIEVE_PHDR,
  LOAD_ELF_BAD_HEADER, LOAD_ELF_ZERO_SIZED_PSECTION, LOAD_ELF_CANT_HANDLE_FILE, LOAD_ELF_UPDATE_PHDR,
  LOAD_PSECTION_PRSV = 400, LOAD_PSECTION_COPY1, LOAD_PSECTION_COPY2, LOAD_PSECTION_MAP_W,
  LOAD_PSECTION_MAP_R, LOAD_PSECTION_MAP_R2, LOAD_PSECTION_VRSV, LOAD_PSECTION_SHARE_RO,
  LOAD_PSECTION_UNMAP, LOAD_PSECTION_PRSV_ZEROES = 500, LOAD_PSECTION_VRSV_ZEROES, LOAD_PSECTION_MAP_ME_ZEROES,
  LOAD_PSECTION_VUNMAP_ME_ZEROES, LOAD_PSECTION_COPY_REMAINING, LOAD_PSECTION_VRELE_ZEROES, LOAD_PSECTION_PGIVE_ZEROES,
  LOAD_PSECTION_MAP_ZEROES, LOAD_SIGCODE_PRSV = 600, LOAD_SIGCODE_VRSV, LOAD_SIGCODE_VMAP,
  LOAD_SIGCODE_COPY, LOAD_PINFO, LOAD_VIRT_ASRELE = 700
}

Functions

t_load_status load_exec (asid_t asid, char *path, vaddr_t mapaddr, u_int32_t loadopts, u_int32_t *eip)


Define Documentation

#define __CONVEN_LOAD_H__   1
 

#define LOADOPT_AS_IS   (1<<3u)
 

share/map all file in one block as RW

  • you should use -dN option with ld: code is executed directly in the file (no need to reorganize psections)
  • you should provide a "mapaddr".

#define LOADOPT_BOOTFS   (1<<0u)
 

search file in bootfs

  • there might be race conditions in this option if creator and a process load file at the same time. to avoid this, this option must be used e.g in init.conf with no scheduling enabled or in a non interruptible task.

#define LOADOPT_VERBOSE   (1<<10u)
 

prints debug messages

#define LOADOPT_WRITABLE_TEXT   (1<<4u)
 

program text is writable

  • this option causes all sections to be loaded privately in RW


Enumeration Type Documentation

enum t_load_status
 

Enumerator:
LOAD_EZERO  No error
LOAD_BOOTFS_VRSV  error rsving a vpage for mapping bootfs
LOAD_BOOTFS_MAP  error mapping bootfs
LOAD_BOOTFS_FIND_FILE  file does not exist in bootfs
LOAD_BOOTFS_UNMAP  error unmapping bootfs
LOAD_BOOTFS_VRELE  error releasing user page
LOAD_BOOTFS_PRSV_ARCHIVE  error rsving file in bootfs memory
LOAD_BOOTFS_BUSY  file is locked by someone
LOAD_BOOTFS_SHARE_ARCHIVE  error sharing archive
LOAD_FS_OPEN_FAILED  open(3) failed
LOAD_FS_PRSV_ARCHIVE  allocating mem for file failed
LOAD_FS_CLOSE_FAILED  close(3) failed
LOAD_FS_READ_FAILED  read(3) failed
LOAD_FS_FSTAT_FAILED  fstat(3) failed
LOAD_FS_SHORT_READ  reading of st.st_size too short
LOAD_FS_PGIVE_ARCHIVE  pgive(2) of phys mem of file failed
LOAD_FS_VRSV_ARCHIVE  rsving user area for mapping phys mem
LOAD_FS_VMAP_ARCHIVE  mapping phys mem of file for read(3)
LOAD_FS_VUNMAP_ARCHIVE  error unmapping phys mem of file
LOAD_FS_VRELE_ARCHIVE  error releasing user area
LOAD_FS_PROP_FETCH_PATH  error retrieving path property
LOAD_FS_PROP_STORE_PATH 
LOAD_FS_PROP_UPDATE_PATH 
LOAD_FS_PROP_STORE_SECTION 
LOAD_ARCHIVE_VRSV  error rsving user mem for full archive
LOAD_ARCHIVE_VMAP  error mapping full archive
LOAD_ARCHIVE_VUNMAP  error unmapping full archive
LOAD_ARCHIVE_VRELE  error relasing user mem for archive
LOAD_ARCHIVE_WIRE  error wiring archive (see LOADOPT_WIRE)
LOAD_ARCHIVE_PRELE  error releasing phys archive
LOAD_ELF_RETRIEVE_HDR  error getting ELF hdr with copy(2)
LOAD_ELF_RETRIEVE_PHDR  error getting ELF program header
LOAD_ELF_BAD_HEADER  bad ELF file
LOAD_ELF_ZERO_SIZED_PSECTION  a psection exists and zero sized
LOAD_ELF_CANT_HANDLE_FILE  architecture/osabi error
LOAD_ELF_UPDATE_PHDR  error updating phdr
LOAD_PSECTION_PRSV  error rsving phys mem for psection
LOAD_PSECTION_COPY1  error copying psection
LOAD_PSECTION_COPY2  error copying psection
LOAD_PSECTION_MAP_W  error mapping psection in writing
LOAD_PSECTION_MAP_R  error mapping psection in read-only
LOAD_PSECTION_MAP_R2  error mapping psection in read-only
LOAD_PSECTION_VRSV  error rsving user mem for mapping
LOAD_PSECTION_SHARE_RO  error sharing psection
LOAD_PSECTION_UNMAP  error while temporarily unmapping section
LOAD_PSECTION_PRSV_ZEROES  error rsving phys mem for zeroes
LOAD_PSECTION_VRSV_ZEROES  error rsving user mem for zeroes
LOAD_PSECTION_MAP_ME_ZEROES  error mapping zeroes
LOAD_PSECTION_VUNMAP_ME_ZEROES  error unmapping zeroes
LOAD_PSECTION_COPY_REMAINING  error copying remaining rodata
LOAD_PSECTION_VRELE_ZEROES  error releasing user mem of zeroes
LOAD_PSECTION_PGIVE_ZEROES  error "giving" zeroes to asid
LOAD_PSECTION_MAP_ZEROES  error mapping zeroes for asid
LOAD_SIGCODE_PRSV  pg phys rsv for sigcode failed
LOAD_SIGCODE_VRSV  pg virt rsv for sigcode failed
LOAD_SIGCODE_VMAP  mapping of sigcode page failed
LOAD_SIGCODE_COPY  copy of sigcode failed
LOAD_PINFO  load program info
LOAD_VIRT_ASRELE  error resetting virtual space


Function Documentation

t_load_status load_exec asid_t  asid,
char *  path,
vaddr_t  mapaddr,
u_int32_t  loadopts,
u_int32_t eip
 

By default, the function uses the traditional Unix file system interface to access files (open(3), read(3) and fstat(3)) so only a schedulable task could use them, in the case of a service, see LOADOPT_BOOTFS

This function loads an ELF file into an address space. With LOADOPT_BOOTFS option, this function is able to look in the in core boot file system.

Note in LOADOPT_BOOTFS mode, the in core memory elf headers are used to store some values (e.g where sharable sections are loaded in physical memory). In traditional Unix file system this is impossible so we use prop server to store the location of them.

Parameters:
asid  address space of where to load
path  path of the executable
mapaddr  address to load the file (LOADOPT_AS_IS) or -1
loadopts  loading options
eip  entry point of the exe


Generated on Wed May 24 23:05:54 2006 for LSE/OS by  doxygen 1.4.6