nm_symbol.cpp

00001 /*
00002  *  TOPPERS/FDMP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Function Distributed Multiprocessor Kernel
00005  *
00006  *  Copyright (C) 2005 by Takagi Nobuhisa
00007  * 
00008  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00009  *  によって公表されている GNU General Public License の Version 2 に記
00010  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00011  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00012  *  利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  * 
00030  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00031  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00032  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00033  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00034  * 
00035  */
00036 
00037 /*
00038  *  toppers/nm_symbol.cpp
00039  */
00040 #include "toppers/nm_symbol.hpp"
00041 #include <istream>
00042 #include <sstream>
00043 #include <cctype>
00044 
00045 namespace toppers
00046 {
00047 
00052   void nm_symbol::load( std::istream& istr )
00053   {
00054     while ( istr )
00055     {
00056       std::string buf;
00057       std::getline( istr, buf );
00058       std::istringstream isstr( buf );
00059 
00060       unsigned long address = 0;
00061       char type;
00062       std::string symbol;
00063       if ( !std::isspace( buf[0] ) )
00064       {
00065         isstr >> std::hex >> address;
00066       }
00067       isstr >> type >> symbol;
00068 
00069       if ( !symbol.empty() )
00070       {
00071         entry e;
00072         e.address = address;
00073         e.type = static_cast<unsigned char>( type );
00074         symbol_map_[symbol] = e;
00075       }
00076     }
00077   }
00078 
00084   const nm_symbol::entry nm_symbol::find( const std::string& symbol ) const
00085   {
00086     std::map<std::string, entry>::const_iterator iter( symbol_map_.find( symbol ) );
00087     entry e = { 0, -1 };
00088     if ( iter != symbol_map_.end() )
00089     {
00090       e = iter->second;
00091     }
00092     else
00093     {
00094       iter = symbol_map_.find( "_" + symbol );  // 識別子に'_'が付加される場合に対応
00095       if ( iter != symbol_map_.end() )
00096       {
00097         e = iter->second;
00098       }
00099     }
00100     return e;
00101   }
00102 
00103 }

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Wed Apr 12 16:31:57 2006 に Doxygen によって生成されました。