bootAoutLib.c
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:2k
开发平台:

MultiPlatform

  1. /* bootAoutLib.c - UNIX a.out object module boot loader */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,09feb93,jmm  added call to cacheTextUpdate() in bootAoutModule (SPR #1932)
  8. 01a,27jul92,elh  created from loadAoutLib.c
  9. */
  10. /*
  11. DESCRIPTION
  12. This library provides an object module boot loading facility for 
  13. the a.out object module format. 
  14. SEE ALSO: bootLoadLib
  15. .pG "Basic OS"
  16. */
  17. /* includes */
  18. #include "vxWorks.h"
  19. #include "a_out.h"
  20. #include "fioLib.h"
  21. #include "stdio.h"
  22. #include "bootLoadLib.h"
  23. #include "cacheLib.h"
  24. /*******************************************************************************
  25. *
  26. * bootAoutModule - load an a.out object module into memory
  27. *
  28. * This routine loads an object module in a.out format from the specified
  29. * file, and places the code, data, and BSS at the locations specified within
  30. * the file.  The entry point of the module is returned in <pEntry>.  This 
  31. * routine is generally used for bootstrap loading.
  32. *
  33. * RETURNS:
  34. * OK, or
  35. * ERROR if the routine cannot read the file
  36. *
  37. * SEE ALSO: loadModuleAt()
  38. */
  39. LOCAL STATUS bootAoutModule 
  40.     (
  41.     int fd,
  42.     FUNCPTR *pEntry  /* entry point of module */
  43.     )
  44.     {
  45.     struct exec hdr; /* a.out header */
  46.     int nBytes;
  47.     nBytes = fioRead (fd, (char *) &hdr, sizeof (struct exec));
  48.     if (nBytes < sizeof (struct exec))
  49.         return (ERROR);
  50.     printf ("%d", hdr.a_text);
  51.     nBytes = fioRead (fd, (char *) hdr.a_entry, (int) hdr.a_text);
  52.     if (nBytes < hdr.a_text)
  53.         return (ERROR);
  54.     cacheTextUpdate ((void *) hdr.a_entry, hdr.a_text);
  55.     printf (" + %d", hdr.a_data);
  56.     nBytes = fioRead (fd, (char *) (hdr.a_entry + hdr.a_text),
  57.                       (int) hdr.a_data);
  58.     if (nBytes < hdr.a_data)
  59.         return (ERROR);
  60.     printf (" + %dn", hdr.a_bss);
  61.     *pEntry = (FUNCPTR) hdr.a_entry;
  62.     return (OK);
  63.     }
  64. /********************************************************************************
  65. * bootAoutInit - initialize the system for aout load modules
  66. *
  67. * This routine initialized VxWorks to use an a.out format for
  68. * boot loading modules.
  69. *
  70. * RETURNS:
  71. * OK, or
  72. * ERROR if XXX
  73. *
  74. * SEE ALSO: loadModuleAt()
  75. */
  76. STATUS bootAoutInit
  77.     (
  78.     )
  79.     {
  80.     /* XXX check for installed ? */
  81.     bootLoadRoutine = bootAoutModule;
  82.     return (OK);
  83.     }