Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
#include"mcoff.h"
2
#include
3
#include"string.h"
4
 
5
/* static inline void nprintf(char * s,int n)
6
{
7
 printf("nprintf(%u, '",n);
8
 for(;n;n--)
9
  putch(*s++);
10
 printf("')");
11
} */
12
 
13
SYMENT * find_coff_symbol(coffobj_t * obj,char * objname)
14
{
15
 int namelen;
16
 int symno;
17
 int xlen;
18
 SYMENT * symtab;
19
 char * symnamep,symnamelen;
20
 symtab=obj->co_symtab;
21
 namelen=strlen(objname);
22
 for(symno=0;symnoco_filehdr->f_nsyms;symno++,symtab++)
23
 {
24
  if(symtab->e.e.e_zeroes==0)
25
  {
26
   symnamep=(char *)(((long)obj->co_strtab)+symtab->e.e.e_offset);
27
   symnamelen=strlen(symnamep);
28
/*   printf("strtab=%u %x %u ",symtab->e.e.e_offset,symnamep,symnamelen); */
29
  } else {
30
   symnamep=(char *)symtab->e.e_name;
31
   symnamelen=strlen(symnamep);
32
   if(symnamelen>E_SYMNMLEN)
33
    symnamelen=E_SYMNMLEN;
34
  }
35
/*  nprintf(symnamep,symnamelen);
36
  printf("\n"); */
37
  if(symtab->e_scnum!=0 && namelen==symnamelen && !strncmp(objname,symnamep,namelen))
38
   return symtab;
39
 }
40
 return NULL;
41
}
42
 
43
unsigned long mcoff_get_ref(coffobj_t * obj,char * symname)
44
{
45
 SYMENT * sym=find_coff_symbol(obj,symname);
46
 if(!sym) return 0;
47
 return sym->e_value+obj->co_sections[sym->e_scnum-1].s_scnptr+obj->co_loadaddr;
48
}