00001 // 00002 // Copyright (c) 2005-2008 Kenichi Watanabe. 00003 // Copyright (c) 2005-2008 Yasuhiro Watari. 00004 // Copyright (c) 2005-2008 Hironori Ichibayashi. 00005 // Copyright (c) 2008-2009 Kazuo Horio. 00006 // Copyright (c) 2009-2013 Naruki Kurata. 00007 // Copyright (c) 2005-2013 Ryota Shioya. 00008 // Copyright (c) 2005-2013 Masahiro Goshima. 00009 // 00010 // This software is provided 'as-is', without any express or implied 00011 // warranty. In no event will the authors be held liable for any damages 00012 // arising from the use of this software. 00013 // 00014 // Permission is granted to anyone to use this software for any purpose, 00015 // including commercial applications, and to alter it and redistribute it 00016 // freely, subject to the following restrictions: 00017 // 00018 // 1. The origin of this software must not be misrepresented; you must not 00019 // claim that you wrote the original software. If you use this software 00020 // in a product, an acknowledgment in the product documentation would be 00021 // appreciated but is not required. 00022 // 00023 // 2. Altered source versions must be plainly marked as such, and must not be 00024 // misrepresented as being the original software. 00025 // 00026 // 3. This notice may not be removed or altered from any source 00027 // distribution. 00028 // 00029 // 00030 00031 00032 #include <pch.h> 00033 #include "Interface/MemAccess.h" 00034 00035 using namespace Onikiri; 00036 00037 // 00038 // Returns a string that represents the current object. 00039 // 00040 const std::string MemAccess::ToString() const 00041 { 00042 // Convert the value to a string depending on its size. 00043 String strValue; 00044 for( int i = 0; i < 8; i++ ){ 00045 if( i < size ){ 00046 strValue = String().format( "%02x", (( value >> (i*8) ) & 0xff) ) + strValue; 00047 } 00048 } 00049 00050 String str; 00051 str.format( 00052 "pid:%d tid:%d address:%08x%08x value:%s size:%d(%s)\n", 00053 address.pid, 00054 address.tid, 00055 (u32)(address.address >> 32), 00056 (u32)(address.address & 0xffffffff), 00057 strValue.c_str(), 00058 size, 00059 sign ? "signed" : "unsigned" 00060 ); 00061 00062 switch( result ){ 00063 default: 00064 str += "The memory access is successful."; 00065 break; 00066 case MemAccess::MAR_READ_INVALID_ADDRESS: 00067 str += "MAR_READ_INVALID_ADDRESS: The memory was not assigned and could not be read."; 00068 break; 00069 case MemAccess::MAR_READ_NOT_READABLE: 00070 str += "MAR_READ_NOT_READABLE: The memory could not be read."; 00071 break; 00072 case MemAccess::MAR_READ_UNALIGNED_ADDRESS: 00073 str += "MAR_READ_UNALIGNED_ADDRESS: An misaligned read access occurs."; 00074 break; 00075 case MemAccess::MAR_WRITE_INVALID_ADDRESS: 00076 str += "MAR_WRITE_INVALID_ADDRESS: The memory was not assigned and could not be written."; 00077 break; 00078 case MemAccess::MAR_WRITE_UNALIGNED_ADDRESS: 00079 str += "MAR_WRITE_UNALIGNED_ADDRESS: An misaligned write access occurs."; 00080 break; 00081 case MemAccess::MAR_WRITE_NOT_WRITABLE: 00082 str += "MAR_WRITE_NOT_WRITABLE: The memory could not be written."; 00083 break; 00084 } 00085 00086 return str; 00087 }