1b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 2b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--------------------------------------------------------------------*/ 3b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--- Misc simple stuff lacking a better home. misc.c ---*/ 4b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--------------------------------------------------------------------*/ 5b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 6b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/* 7b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj This file is part of Valgrind, a dynamic binary instrumentation 8b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj framework. 9b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 100f157ddb404bcde7815a1c5bf2d7e41c114f3d73sewardj Copyright (C) 2008-2013 OpenWorks LLP 11b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj info@open-works.co.uk 12b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 13b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj This program is free software; you can redistribute it and/or 14b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj modify it under the terms of the GNU General Public License as 15b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj published by the Free Software Foundation; either version 2 of the 16b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj License, or (at your option) any later version. 17b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 18b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj This program is distributed in the hope that it will be useful, but 19b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj WITHOUT ANY WARRANTY; without even the implied warranty of 20b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj General Public License for more details. 22b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 23b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj You should have received a copy of the GNU General Public License 24b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj along with this program; if not, write to the Free Software 25b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 02111-1307, USA. 27b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 28b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj The GNU General Public License is contained in the file COPYING. 29b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 30b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj Neither the names of the U.S. Department of Energy nor the 31b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj University of California nor the names of its contributors may be 32b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj used to endorse or promote products derived from this software 33b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj without prior written permission. 34b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj*/ 35b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 36b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "pub_core_basics.h" 37b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "pub_core_libcbase.h" 38b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "pub_core_libcassert.h" 39b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "pub_core_mallocfree.h" 40b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "pub_core_xarray.h" 41b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 42b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj#include "priv_misc.h" /* self */ 43b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 44b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 4554fe2021b87b9e5edb8ec8070f47b86d5cafb8aaflorianvoid* ML_(dinfo_zalloc) ( const HChar* cc, SizeT szB ) { 46b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj void* v; 47b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj vg_assert(szB > 0); 489c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj v = VG_(arena_malloc)( VG_AR_DINFO, cc, szB ); 49b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj VG_(memset)(v, 0, szB); 50b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj return v; 51b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj} 52b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 530b9d0646949bd382758763664d3bf2d6115993aephilippevoid ML_(dinfo_shrink_block)( void* ptr, SizeT szB ) { 540b9d0646949bd382758763664d3bf2d6115993aephilippe VG_(arena_realloc_shrink)( VG_AR_DINFO, ptr, szB ); 550b9d0646949bd382758763664d3bf2d6115993aephilippe} 560b9d0646949bd382758763664d3bf2d6115993aephilippe 57b8b79addf04dd5d0b558916e26df0b1927cbd758sewardjvoid ML_(dinfo_free) ( void* v ) { 58b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj VG_(arena_free)( VG_AR_DINFO, v ); 59b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj} 60b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 611636d33c13958b9c0e7d3059cdd5005746418eb2florianHChar* ML_(dinfo_strdup) ( const HChar* cc, const HChar* str ) { 629c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj return VG_(arena_strdup)( VG_AR_DINFO, cc, str ); 639c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj} 649c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj 65518850bf0da07ed3e2244e307268ae0fd80e93a8florianvoid* ML_(dinfo_memdup) ( const HChar* cc, const void* str, SizeT nStr ) { 661636d33c13958b9c0e7d3059cdd5005746418eb2florian void* dst = VG_(arena_malloc)( VG_AR_DINFO, cc, nStr ); 679c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj VG_(memcpy)(dst, str, nStr); 689c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj return dst; 69b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj} 70b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj 7146cc04521acf2827eb33310fadc119bf2dc039e4florianvoid* ML_(dinfo_realloc) ( const HChar* cc, void* ptr, SizeT new_size ) { 7246cc04521acf2827eb33310fadc119bf2dc039e4florian void* dst = VG_(arena_realloc)( VG_AR_DINFO, cc, ptr, new_size ); 7346cc04521acf2827eb33310fadc119bf2dc039e4florian vg_assert(dst); 7446cc04521acf2827eb33310fadc119bf2dc039e4florian return dst; 7546cc04521acf2827eb33310fadc119bf2dc039e4florian} 7646cc04521acf2827eb33310fadc119bf2dc039e4florian 77d32fb2b481ee4eda50a62e49d25199e0174940e0tomstatic inline Bool host_is_little_endian ( void ) { 78d32fb2b481ee4eda50a62e49d25199e0174940e0tom UInt x = 0x76543210; 79d32fb2b481ee4eda50a62e49d25199e0174940e0tom UChar* p = (UChar*)(&x); 80d32fb2b481ee4eda50a62e49d25199e0174940e0tom return toBool(*p == 0x10); 81d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 82d32fb2b481ee4eda50a62e49d25199e0174940e0tom 83c474069560175a011af75868e0cbe66a6646f8a1philippeShort ML_(readUAS_Short)( const UChar* data ) { 84d32fb2b481ee4eda50a62e49d25199e0174940e0tom Short r = 0; 85d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 86d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 87d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 8 ); 88d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 89d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[1] 90d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[0]) << 8 ); 91d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 92d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 93d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 94d32fb2b481ee4eda50a62e49d25199e0174940e0tom 95c474069560175a011af75868e0cbe66a6646f8a1philippeInt ML_(readUAS_Int) ( const UChar* data ) { 96d32fb2b481ee4eda50a62e49d25199e0174940e0tom Int r = 0; 97d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 98d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 99d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 8 ) 100d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[2]) << 16 ) 101d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[3]) << 24 ); 102d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 103d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[3] 104d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[2]) << 8 ) 105d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 16 ) 106d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[0]) << 24 ); 107d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 108d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 109d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 110d32fb2b481ee4eda50a62e49d25199e0174940e0tom 111c474069560175a011af75868e0cbe66a6646f8a1philippeLong ML_(readUAS_Long) ( const UChar* data ) { 112d32fb2b481ee4eda50a62e49d25199e0174940e0tom Long r = 0; 113d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 114d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 115d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[1]) << 8 ) 116d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[2]) << 16 ) 117d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[3]) << 24 ) 118d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[4]) << 32 ) 119d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[5]) << 40 ) 120d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[6]) << 48 ) 121d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[7]) << 56 ); 122d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 123d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[7] 124d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[6]) << 8 ) 125d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[5]) << 16 ) 126d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[4]) << 24 ) 127d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[3]) << 32 ) 128d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[2]) << 40 ) 129d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[1]) << 48 ) 130d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[0]) << 56 ); 131d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 132d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 133d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 134d32fb2b481ee4eda50a62e49d25199e0174940e0tom 135c474069560175a011af75868e0cbe66a6646f8a1philippeUShort ML_(readUAS_UShort) ( const UChar* data ) { 136d32fb2b481ee4eda50a62e49d25199e0174940e0tom UInt r = 0; 137d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 138d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 139d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 8 ); 140d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 141d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[1] 142d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[0]) << 8 ); 143d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 144d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 145d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 146d32fb2b481ee4eda50a62e49d25199e0174940e0tom 147c474069560175a011af75868e0cbe66a6646f8a1philippeUChar *ML_(writeUAS_UShort) ( UChar* ptr, UShort val ) { 14886781fabbfc019b752f9605e487cfce77b2a592atom if (host_is_little_endian()) { 14986781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = val & 0xff; 15086781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = ( val >> 8 ) & 0xff; 15186781fabbfc019b752f9605e487cfce77b2a592atom } else { 15286781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = ( val >> 8 ) & 0xff; 15386781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = val & 0xff; 15486781fabbfc019b752f9605e487cfce77b2a592atom } 15586781fabbfc019b752f9605e487cfce77b2a592atom return ptr + sizeof(UShort); 15686781fabbfc019b752f9605e487cfce77b2a592atom} 15786781fabbfc019b752f9605e487cfce77b2a592atom 158c474069560175a011af75868e0cbe66a6646f8a1philippeUWord ML_(readUAS_UWord) ( const UChar* data ) { 15986781fabbfc019b752f9605e487cfce77b2a592atom if (sizeof(UWord) == sizeof(UInt)) { 16086781fabbfc019b752f9605e487cfce77b2a592atom return ML_(read_UInt)(data); 16186781fabbfc019b752f9605e487cfce77b2a592atom } else if (sizeof(UWord) == sizeof(ULong)) { 16286781fabbfc019b752f9605e487cfce77b2a592atom return ML_(read_ULong)(data); 16386781fabbfc019b752f9605e487cfce77b2a592atom } else { 16486781fabbfc019b752f9605e487cfce77b2a592atom vg_assert(0); 16586781fabbfc019b752f9605e487cfce77b2a592atom } 16686781fabbfc019b752f9605e487cfce77b2a592atom} 16786781fabbfc019b752f9605e487cfce77b2a592atom 168c474069560175a011af75868e0cbe66a6646f8a1philippeUInt ML_(readUAS_UInt) ( const UChar* data ) { 169d32fb2b481ee4eda50a62e49d25199e0174940e0tom UInt r = 0; 170d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 171d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 172d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 8 ) 173d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[2]) << 16 ) 174d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[3]) << 24 ); 175d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 176d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[3] 177d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[2]) << 8 ) 178d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[1]) << 16 ) 179d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((UInt)data[0]) << 24 ); 180d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 181d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 182d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 183d32fb2b481ee4eda50a62e49d25199e0174940e0tom 184c474069560175a011af75868e0cbe66a6646f8a1philippeUChar* ML_(writeUAS_UInt) ( UChar* ptr, UInt val ) { 18586781fabbfc019b752f9605e487cfce77b2a592atom if (host_is_little_endian()) { 18686781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = val & 0xff; 18786781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = ( val >> 8 ) & 0xff; 18886781fabbfc019b752f9605e487cfce77b2a592atom ptr[2] = ( val >> 16 ) & 0xff; 18986781fabbfc019b752f9605e487cfce77b2a592atom ptr[3] = ( val >> 24 ) & 0xff; 19086781fabbfc019b752f9605e487cfce77b2a592atom } else { 19186781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = ( val >> 24 ) & 0xff; 19286781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = ( val >> 16 ) & 0xff; 19386781fabbfc019b752f9605e487cfce77b2a592atom ptr[2] = ( val >> 8 ) & 0xff; 19486781fabbfc019b752f9605e487cfce77b2a592atom ptr[3] = val & 0xff; 19586781fabbfc019b752f9605e487cfce77b2a592atom } 19686781fabbfc019b752f9605e487cfce77b2a592atom return ptr + sizeof(UInt); 19786781fabbfc019b752f9605e487cfce77b2a592atom} 19886781fabbfc019b752f9605e487cfce77b2a592atom 199c474069560175a011af75868e0cbe66a6646f8a1philippeULong ML_(readUAS_ULong) ( const UChar* data ) { 200d32fb2b481ee4eda50a62e49d25199e0174940e0tom ULong r = 0; 201d32fb2b481ee4eda50a62e49d25199e0174940e0tom if (host_is_little_endian()) { 202d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[0] 203d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[1]) << 8 ) 204d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[2]) << 16 ) 205d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[3]) << 24 ) 206d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[4]) << 32 ) 207d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[5]) << 40 ) 208d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[6]) << 48 ) 209d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[7]) << 56 ); 210d32fb2b481ee4eda50a62e49d25199e0174940e0tom } else { 211d32fb2b481ee4eda50a62e49d25199e0174940e0tom r = data[7] 212d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[6]) << 8 ) 213d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[5]) << 16 ) 214d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[4]) << 24 ) 215d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[3]) << 32 ) 216d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[2]) << 40 ) 217d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[1]) << 48 ) 218d32fb2b481ee4eda50a62e49d25199e0174940e0tom | ( ((ULong)data[0]) << 56 ); 219d32fb2b481ee4eda50a62e49d25199e0174940e0tom } 220d32fb2b481ee4eda50a62e49d25199e0174940e0tom return r; 221d32fb2b481ee4eda50a62e49d25199e0174940e0tom} 222d32fb2b481ee4eda50a62e49d25199e0174940e0tom 223c474069560175a011af75868e0cbe66a6646f8a1philippeUChar* ML_(writeUAS_ULong) ( UChar* ptr, ULong val ) { 22486781fabbfc019b752f9605e487cfce77b2a592atom if (host_is_little_endian()) { 22586781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = val & 0xff; 22686781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = ( val >> 8 ) & 0xff; 22786781fabbfc019b752f9605e487cfce77b2a592atom ptr[2] = ( val >> 16 ) & 0xff; 22886781fabbfc019b752f9605e487cfce77b2a592atom ptr[3] = ( val >> 24 ) & 0xff; 22986781fabbfc019b752f9605e487cfce77b2a592atom ptr[4] = ( val >> 32 ) & 0xff; 23086781fabbfc019b752f9605e487cfce77b2a592atom ptr[5] = ( val >> 40 ) & 0xff; 23186781fabbfc019b752f9605e487cfce77b2a592atom ptr[6] = ( val >> 48 ) & 0xff; 23286781fabbfc019b752f9605e487cfce77b2a592atom ptr[7] = ( val >> 56 ) & 0xff; 23386781fabbfc019b752f9605e487cfce77b2a592atom } else { 23486781fabbfc019b752f9605e487cfce77b2a592atom ptr[0] = ( val >> 56 ) & 0xff; 23586781fabbfc019b752f9605e487cfce77b2a592atom ptr[1] = ( val >> 48 ) & 0xff; 23686781fabbfc019b752f9605e487cfce77b2a592atom ptr[2] = ( val >> 40 ) & 0xff; 23786781fabbfc019b752f9605e487cfce77b2a592atom ptr[3] = ( val >> 32 ) & 0xff; 23886781fabbfc019b752f9605e487cfce77b2a592atom ptr[4] = ( val >> 24 ) & 0xff; 23986781fabbfc019b752f9605e487cfce77b2a592atom ptr[5] = ( val >> 16 ) & 0xff; 24086781fabbfc019b752f9605e487cfce77b2a592atom ptr[6] = ( val >> 8 ) & 0xff; 24186781fabbfc019b752f9605e487cfce77b2a592atom ptr[7] = val & 0xff; 24286781fabbfc019b752f9605e487cfce77b2a592atom } 24386781fabbfc019b752f9605e487cfce77b2a592atom return ptr + sizeof(ULong); 24486781fabbfc019b752f9605e487cfce77b2a592atom} 24586781fabbfc019b752f9605e487cfce77b2a592atom 24686781fabbfc019b752f9605e487cfce77b2a592atom 247c474069560175a011af75868e0cbe66a6646f8a1philippeAddr ML_(readUAS_Addr) ( const UChar* data ) { 248fd892fc2654e6eae5e40f401a230e0fb80d6362ftom if (sizeof(Addr) == sizeof(UInt)) { 249fd892fc2654e6eae5e40f401a230e0fb80d6362ftom return ML_(read_UInt)(data); 250fd892fc2654e6eae5e40f401a230e0fb80d6362ftom } else if (sizeof(Addr) == sizeof(ULong)) { 251fd892fc2654e6eae5e40f401a230e0fb80d6362ftom return ML_(read_ULong)(data); 252fd892fc2654e6eae5e40f401a230e0fb80d6362ftom } else { 253fd892fc2654e6eae5e40f401a230e0fb80d6362ftom vg_assert(0); 254fd892fc2654e6eae5e40f401a230e0fb80d6362ftom } 255fd892fc2654e6eae5e40f401a230e0fb80d6362ftom} 256fd892fc2654e6eae5e40f401a230e0fb80d6362ftom 257c474069560175a011af75868e0cbe66a6646f8a1philippeUChar* ML_(writeUAS_Addr) ( UChar* ptr, Addr val ) { 25886781fabbfc019b752f9605e487cfce77b2a592atom if (sizeof(Addr) == sizeof(UInt)) { 25986781fabbfc019b752f9605e487cfce77b2a592atom return ML_(write_UInt)(ptr, val); 26086781fabbfc019b752f9605e487cfce77b2a592atom } else if (sizeof(Addr) == sizeof(ULong)) { 26186781fabbfc019b752f9605e487cfce77b2a592atom return ML_(write_ULong)(ptr, val); 26286781fabbfc019b752f9605e487cfce77b2a592atom } else { 26386781fabbfc019b752f9605e487cfce77b2a592atom vg_assert(0); 26486781fabbfc019b752f9605e487cfce77b2a592atom } 26586781fabbfc019b752f9605e487cfce77b2a592atom} 26686781fabbfc019b752f9605e487cfce77b2a592atom 267b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--------------------------------------------------------------------*/ 268b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--- end misc.c ---*/ 269b8b79addf04dd5d0b558916e26df0b1927cbd758sewardj/*--------------------------------------------------------------------*/ 270