14
|
1 #include <string.h>
|
|
2 #include "SymTable.h"
|
|
3
|
20
|
4 SymTable::~SymTable(void)
|
|
5 {
|
|
6 SymTbPtr tb;
|
|
7
|
|
8 for (int i = 0; i < symtb_index; i++) {
|
|
9 tb = &symtb[i];
|
|
10 delete [] tb->sym;
|
|
11 }
|
|
12
|
|
13 delete [] symtb;
|
|
14 }
|
|
15
|
14
|
16 void
|
|
17 SymTable::init(void)
|
|
18 {
|
|
19 symtb = new SymTb[SYM_MAX_SIZE];
|
|
20 symtb_index = 0;
|
|
21 }
|
|
22
|
|
23 void
|
105
|
24 SymTable::set_symbol(const char *sym, FuncObject addr)
|
14
|
25 {
|
|
26 SymTbPtr tb = &symtb[symtb_index++];
|
|
27
|
|
28 tb->sym = new char[strlen(sym)+1];
|
|
29 memcpy(tb->sym, sym, strlen(sym)+1);
|
|
30 tb->address = addr;
|
|
31 }
|
|
32
|
105
|
33 void
|
|
34 SymTable::set_func(int id, FuncObject addr)
|
|
35 {
|
|
36 SymTbPtr tb = &symtb[id];
|
|
37
|
|
38 tb->address = addr;
|
|
39 }
|
|
40
|
|
41 SymTable::FuncObject
|
14
|
42 SymTable::get_address(int fd)
|
|
43 {
|
|
44 if (fd >= symtb_index) {
|
|
45 // Fix me
|
|
46 // error process
|
|
47 }
|
|
48
|
|
49 return symtb[fd].address;
|
|
50 }
|
|
51
|
|
52
|
|
53 int
|
|
54 SymTable::get_fd(const char *sym)
|
|
55 {
|
|
56 SymTbPtr tb;
|
|
57
|
|
58 for (int i = 0; i < SYM_MAX_SIZE; i++) {
|
|
59 tb = &symtb[i];
|
|
60 if (strcmp(tb->sym, sym) == 0) {
|
|
61 return i;
|
|
62 }
|
|
63 }
|
|
64
|
|
65 return -1;
|
|
66 }
|