63     kprintf(
"kmod_add: unable to allocate memory!\n");
 
   80   elfHeader *binaryHeader = 0x0;
 
   81   elfProgramHeader *programHeader = 0x0;
 
   82   elfSectionHeader *sectionHeader = 0x0;
 
   83   elfDynSym *relSymTab = 0x0;
 
   84   elfPltInfo *elfRel = 0x0;
 
   87   kmod_fd = 
fopen(kmod_file, 
"rb");
 
   89     kprintf(
"Can not open %s\n", kmod_file);
 
   94   fseek(kmod_fd, 0x0, 0x0);
 
   95   binaryHeader = (elfHeader *) 
kmalloc(
sizeof(elfHeader));
 
   96   if (binaryHeader == 0x0) {
 
   97     kprintf(
"kmod: out of memory\n");
 
  102   fread(binaryHeader, 
sizeof(elfHeader), 1, kmod_fd);
 
  104   programHeader = (elfProgramHeader *) 
kmalloc(
sizeof(elfProgramHeader) * binaryHeader->ePhnum);
 
  106   fseek(kmod_fd, binaryHeader->ePhoff, 0);
 
  107   fread(programHeader, 
sizeof(elfSectionHeader), binaryHeader->ePhnum, kmod_fd);
 
  109   sectionHeader = (elfSectionHeader *) 
kmalloc(
sizeof(elfSectionHeader) * binaryHeader->eShnum);
 
  111   fseek(kmod_fd, binaryHeader->eShoff, 0);
 
  112   fread(sectionHeader, 
sizeof(elfSectionHeader), binaryHeader->eShnum, kmod_fd);
 
  114   shStr = (
char *) 
kmalloc(sectionHeader[binaryHeader->eShstrndx].shSize);
 
  115   fseek(kmod_fd, sectionHeader[binaryHeader->eShstrndx].shOffset, 0);
 
  116   fread(shStr, sectionHeader[binaryHeader->eShstrndx].shSize, 1, kmod_fd);
 
  118   for (i = 0; i < binaryHeader->ePhnum; i++) {
 
  119     switch (programHeader[i].phType) {
 
  122         newLoc = (
char *) programHeader[i].phVaddr + 
LD_START;
 
  127         for (x = 0; x < ((programHeader[i].phMemsz) + 4095); x += 0x1000) {
 
  130             kpanic(
"vmmRemapPage: ld\n");
 
  131           memset((
void *) ((programHeader[i].phVaddr & 0xFFFFF000) + x + 
LD_START), 0x0, 0x1000);
 
  134         fseek(kmod_fd, programHeader[i].phOffset, 0x0);
 
  135         fread(newLoc, programHeader[i].phFilesz, 1, kmod_fd);
 
  147         kprintf(
"Unhandled Header : %08x\n", programHeader[i].phType);
 
  152   for (i = 0x0; i < binaryHeader->eShnum; i++) {
 
  153     switch (sectionHeader[i].shType) {
 
  155         if (!
strcmp((shStr + sectionHeader[i].shName), 
".dynstr")) {
 
  156           dynStr = (
char *) 
kmalloc(sectionHeader[i].shSize);
 
  157           fseek(kmod_fd, sectionHeader[i].shOffset, 0x0);
 
  158           fread(dynStr, sectionHeader[i].shSize, 1, kmod_fd);
 
  162         elfRel = (elfPltInfo *) 
kmalloc(sectionHeader[i].shSize);
 
  163         fseek(kmod_fd, sectionHeader[i].shOffset, 0x0);
 
  164         fread(elfRel, sectionHeader[i].shSize, 1, kmod_fd);
 
  166         for (x = 0x0; x < sectionHeader[i].shSize / 
sizeof(elfPltInfo); x++) {
 
  181               kprintf(
"relTab [%s][0x%X][0x%X]\n", dynStr + relSymTab[rel].dynName, relSymTab[rel].dynValue, relSymTab[rel].dynName);
 
  188         relSymTab = (elfDynSym *) 
kmalloc(sectionHeader[i].shSize);
 
  189         fseek(kmod_fd, sectionHeader[i].shOffset, 0x0);
 
  190         fread(relSymTab, sectionHeader[i].shSize, 1, kmod_fd);
 
  196   i = binaryHeader->eEntry + 
LD_START;
 
  201   kfree(sectionHeader);
 
  202   kfree(programHeader);