cdt/cdt_6_0_x/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java
changeset 99 83ae0d82da3b
parent 37 c2bce6dd59e7
equal deleted inserted replaced
96:defec9d2b40a 99:83ae0d82da3b
   642 		return scnhdrs;
   642 		return scnhdrs;
   643 	}
   643 	}
   644 
   644 
   645 	public Symbol[] getSymbols() throws IOException {
   645 	public Symbol[] getSymbols() throws IOException {
   646 		if (symbolTable == null) {
   646 		if (symbolTable == null) {
       
   647 			SectionHeader[] secHeaders = getSectionHeaders();
       
   648 			NTOptionalHeader ntHeader = getNTOptionalHeader();
       
   649 
   647 			RandomAccessFile accessFile = getRandomAccessFile();
   650 			RandomAccessFile accessFile = getRandomAccessFile();
   648 			long offset = fileHeader.f_symptr;
   651 			long offset = fileHeader.f_symptr;
   649 			symbolTable = new Symbol[fileHeader.f_nsyms];
   652 			symbolTable = new Symbol[fileHeader.f_nsyms];
   650 			for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
   653 			for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
   651 				symbolTable[i] = new Symbol(accessFile, offset);
   654 				Symbol newSym = new Symbol(accessFile, offset);
   652 				NTOptionalHeader ntHeader = getNTOptionalHeader();
   655 				
   653 				// FIXME: What is this again ?
   656 				// Now convert section offset of the symbol to image offset.
       
   657 				if (newSym.n_scnum >= 1 && newSym.n_scnum <= secHeaders.length)	// valid section #
       
   658 					newSym.n_value += secHeaders[newSym.n_scnum-1].s_vaddr;
       
   659 				
       
   660 				// convert to absolute address.
   654 				if (ntHeader != null)
   661 				if (ntHeader != null)
   655 					symbolTable[i].n_value += ntHeader.ImageBase + ntHeader.FileAlignment;
   662 					newSym.n_value += ntHeader.ImageBase;
       
   663 				
       
   664 				symbolTable[i] = newSym;
   656 			}				
   665 			}				
   657 		}
   666 		}
   658 		return symbolTable;
   667 		return symbolTable;
   659 	}
   668 	}
   660 
   669