Ghidra Decompiler Analysis Engine
translate.hh
Go to the documentation of this file.
1 /* ###
2  * IP: GHIDRA
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
20 
21 #ifndef __CPUI_TRANSLATE__
22 #define __CPUI_TRANSLATE__
23 
24 #include "pcoderaw.hh"
25 #include "float.hh"
26 
27 // Some errors specific to the translation unit
28 
35 struct UnimplError : public LowlevelError {
37  UnimplError(const string &s,int4 l) : LowlevelError(s) { instruction_length = l; }
42 };
43 
50 struct BadDataError : public LowlevelError {
54  BadDataError(const string &s) : LowlevelError(s) {}
55 };
56 
57 class Translate;
58 
64  string spaceName;
65  uint4 size;
66 public:
67  void restoreXml(const Element *el);
68  const string &getName(void) const { return spaceName; }
69  uint4 getSize(void) const { return size; }
70 };
71 
76 class PcodeEmit {
77 public:
78  virtual ~PcodeEmit(void) {}
79 
92  virtual void dump(const Address &addr,OpCode opc,VarnodeData *outvar,VarnodeData *vars,int4 isize)=0;
93 
95  void restoreXmlOp(const Element *el,const AddrSpaceManager *trans);
96 
97  enum { // Tags for packed pcode format
98  unimpl_tag = 0x20,
99  inst_tag = 0x21,
100  op_tag = 0x22,
101  void_tag = 0x23,
102  spaceid_tag = 0x24,
103  addrsz_tag = 0x25,
104  end_tag = 0x60
105  };
107  static const uint1 *unpackOffset(const uint1 *ptr,uintb &off);
109  static const uint1 *unpackVarnodeData(const uint1 *ptr,VarnodeData &v,const AddrSpaceManager *trans);
111  const uint1 *restorePackedOp(const Address &addr,const uint1 *ptr,const AddrSpaceManager *trans);
112 };
113 
119 public:
120  virtual ~AssemblyEmit(void) {}
121 
131  virtual void dump(const Address &addr,const string &mnem,const string &body)=0;
132 };
133 
141 public:
142  virtual ~AddressResolver(void) {}
143 
156  virtual Address resolve(uintb val,int4 sz,const Address &point,uintb &fullEncoding)=0;
157 };
158 
170 class SpacebaseSpace : public AddrSpace {
171  friend class AddrSpaceManager;
172  AddrSpace *contain;
173  bool hasbaseregister;
174  bool isNegativeStack;
175  VarnodeData baseloc;
176  VarnodeData baseOrig;
177  void setBaseRegister(const VarnodeData &data,int4 origSize,bool stackGrowth);
178 public:
179  SpacebaseSpace(AddrSpaceManager *m,const Translate *t,const string &nm,int4 ind,int4 sz,AddrSpace *base,int4 dl);
181  virtual int4 numSpacebase(void) const;
182  virtual const VarnodeData &getSpacebase(int4 i) const;
183  virtual const VarnodeData &getSpacebaseFull(int4 i) const;
184  virtual bool stackGrowsNegative(void) const { return isNegativeStack; }
185  virtual AddrSpace *getContain(void) const { return contain; }
186  virtual void saveXml(ostream &s) const;
187  virtual void restoreXml(const Element *el);
188 };
189 
195 class JoinRecord {
196  friend class AddrSpaceManager;
197  vector<VarnodeData> pieces;
198  VarnodeData unified;
199 public:
200  int4 numPieces(void) const { return pieces.size(); }
201  bool isFloatExtension(void) const { return (pieces.size() == 1); }
202  const VarnodeData &getPiece(int4 i) const { return pieces[i]; }
203  const VarnodeData &getUnified(void) const { return unified; }
204  Address getEquivalentAddress(uintb offset,int4 &pos) const;
205  bool operator<(const JoinRecord &op2) const;
206 };
207 
210  bool operator()(const JoinRecord *a,const JoinRecord *b) const {
211  return *a < *b; }
212 };
213 
219  vector<AddrSpace *> baselist;
220  vector<AddressResolver *> resolvelist;
221  map<string,AddrSpace *> name2Space;
222  map<int4,AddrSpace *> shortcut2Space;
223  AddrSpace *constantspace;
224  AddrSpace *defaultcodespace;
225  AddrSpace *defaultdataspace;
226  AddrSpace *iopspace;
227  AddrSpace *fspecspace;
228  AddrSpace *joinspace;
229  AddrSpace *stackspace;
230  AddrSpace *uniqspace;
231  uintb joinallocate;
232  set<JoinRecord *,JoinRecordCompare> splitset;
233  vector<JoinRecord *> splitlist;
234 protected:
235  AddrSpace *restoreXmlSpace(const Element *el,const Translate *trans);
236  void restoreXmlSpaces(const Element *el,const Translate *trans);
237  void setDefaultCodeSpace(int4 index);
238  void setDefaultDataSpace(int4 index);
239  void setReverseJustified(AddrSpace *spc);
240  void assignShortcut(AddrSpace *spc);
241  void markNearPointers(AddrSpace *spc,int4 size);
242  void insertSpace(AddrSpace *spc);
243  void copySpaces(const AddrSpaceManager *op2);
244  void addSpacebasePointer(SpacebaseSpace *basespace,const VarnodeData &ptrdata,int4 truncSize,bool stackGrowth);
245  void insertResolver(AddrSpace *spc,AddressResolver *rsolv);
246  void setInferPtrBounds(const Range &range);
247  JoinRecord *findJoinInternal(uintb offset) const;
248 public:
249  AddrSpaceManager(void);
250  virtual ~AddrSpaceManager(void);
251  int4 getDefaultSize(void) const;
252  AddrSpace *getSpaceByName(const string &nm) const;
253  AddrSpace *getSpaceByShortcut(char sc) const;
254  AddrSpace *getIopSpace(void) const;
255  AddrSpace *getFspecSpace(void) const;
256  AddrSpace *getJoinSpace(void) const;
257  AddrSpace *getStackSpace(void) const;
258  AddrSpace *getUniqueSpace(void) const;
259  AddrSpace *getDefaultCodeSpace(void) const;
260  AddrSpace *getDefaultDataSpace(void) const;
261  AddrSpace *getConstantSpace(void) const;
262  Address getConstant(uintb val) const;
264  Address resolveConstant(AddrSpace *spc,uintb val,int4 sz,const Address &point,uintb &fullEncoding) const;
265  int4 numSpaces(void) const;
266  AddrSpace *getSpace(int4 i) const;
268  JoinRecord *findAddJoin(const vector<VarnodeData> &pieces,uint4 logicalsize);
269  JoinRecord *findJoin(uintb offset) const;
270  void setDeadcodeDelay(AddrSpace *spc,int4 delaydelta);
271  void truncateSpace(const TruncationTag &tag);
272 
274  Address constructFloatExtensionAddress(const Address &realaddr,int4 realsize,int4 logicalsize);
275 
277  Address constructJoinAddress(const Translate *translate,const Address &hiaddr,int4 hisz,const Address &loaddr,int4 losz);
278 
280  void renormalizeJoinAddress(Address &addr,int4 size);
281 };
282 
294 class Translate : public AddrSpaceManager {
295  bool target_isbigendian;
296  uintm unique_base;
297 protected:
298  int4 alignment;
299  vector<FloatFormat> floatformats;
300 
301  void setBigEndian(bool val);
302  void setUniqueBase(uintm val);
303 public:
304  Translate(void);
305  void setDefaultFloatFormats(void);
306  bool isBigEndian(void) const;
307  const FloatFormat *getFloatFormat(int4 size) const;
308  int4 getAlignment(void) const;
309  uintm getUniqueBase(void) const;
310 
316  virtual void initialize(DocumentStorage &store)=0;
317 
328  virtual void registerContext(const string &name,int4 sbit,int4 ebit) {}
329 
337  virtual void setContextDefault(const string &name,uintm val) {}
338 
347  virtual void allowContextSet(bool val) const {}
348 
357  virtual void addRegister(const string &nm,AddrSpace *base,uintb offset,int4 size)=0;
358 
364  virtual const VarnodeData &getRegister(const string &nm) const=0;
365 
376  virtual string getRegisterName(AddrSpace *base,uintb off,int4 size) const=0;
377 
384  virtual void getAllRegisters(map<VarnodeData,string> &reglist) const=0;
385 
394  virtual void getUserOpNames(vector<string> &res) const=0;
395 
403  virtual int4 instructionLength(const Address &baseaddr) const=0;
404 
418  virtual int4 oneInstruction(PcodeEmit &emit,const Address &baseaddr) const=0;
419 
428  virtual int4 printAssembly(AssemblyEmit &emit,const Address &baseaddr) const=0;
429 };
430 
434 inline int4 AddrSpaceManager::getDefaultSize(void) const {
435  return defaultcodespace->getAddrSize();
436 }
437 
444  return iopspace;
445 }
446 
453  return fspecspace;
454 }
455 
462  return joinspace;
463 }
464 
471  return stackspace;
472 }
473 
483  return uniqspace;
484 }
485 
492  return defaultcodespace;
493 }
494 
501  return defaultdataspace;
502 }
503 
509  return constantspace;
510 }
511 
518 inline Address AddrSpaceManager::getConstant(uintb val) const {
519  return Address(constantspace,val);
520 }
521 
529  return Address(constantspace,(uintb)(uintp)spc);
530 }
531 
536 inline int4 AddrSpaceManager::numSpaces(void) const {
537  return baselist.size();
538 }
539 
545 inline AddrSpace *AddrSpaceManager::getSpace(int4 i) const {
546  return baselist[i];
547 }
548 
553 inline void Translate::setBigEndian(bool val) {
554  target_isbigendian = val;
555 }
556 
564 inline void Translate::setUniqueBase(uintm val) {
565  if (val>unique_base) unique_base = val;
566 }
567 
572 inline bool Translate::isBigEndian(void) const {
573  return target_isbigendian;
574 }
575 
582 inline int4 Translate::getAlignment(void) const {
583  return alignment;
584 }
585 
592 inline uintm Translate::getUniqueBase(void) const {
593  return unique_base;
594 }
595 
596 #endif
Translate::getRegisterName
virtual string getRegisterName(AddrSpace *base, uintb off, int4 size) const =0
Get the name of a register given its location.
AddrSpaceManager::AddrSpaceManager
AddrSpaceManager(void)
Construct an empty address space manager.
Definition: translate.cc:178
Translate::getAllRegisters
virtual void getAllRegisters(map< VarnodeData, string > &reglist) const =0
Get a list of all register names and the corresponding location.
AddrSpaceManager::restoreXmlSpace
AddrSpace * restoreXmlSpace(const Element *el, const Translate *trans)
Add a space to the model based an on XML tag.
Definition: translate.cc:200
PcodeEmit::restoreXmlOp
void restoreXmlOp(const Element *el, const AddrSpaceManager *trans)
Emit pcode directly from an XML tag.
Definition: translate.cc:894
Translate::printAssembly
virtual int4 printAssembly(AssemblyEmit &emit, const Address &baseaddr) const =0
Disassemble a single machine instruction.
PcodeEmit
Abstract class for emitting pcode to an application.
Definition: translate.hh:76
AddrSpaceManager::insertResolver
void insertResolver(AddrSpace *spc, AddressResolver *rsolv)
Override the base resolver for a space.
Definition: translate.cc:413
AddrSpaceManager::findJoin
JoinRecord * findJoin(uintb offset) const
Find JoinRecord for offset in the join space.
Definition: translate.cc:689
AddrSpace
A region where processor data is stored.
Definition: space.hh:73
AddrSpaceManager::copySpaces
void copySpaces(const AddrSpaceManager *op2)
Copy spaces from another manager.
Definition: translate.cc:387
Translate::oneInstruction
virtual int4 oneInstruction(PcodeEmit &emit, const Address &baseaddr) const =0
Transform a single machine instruction into pcode.
Translate::alignment
int4 alignment
Byte modulo on which instructions are aligned.
Definition: translate.hh:298
LowlevelError
The lowest level error generated by the decompiler.
Definition: error.hh:44
UnimplError
Exception for encountering unimplemented pcode.
Definition: translate.hh:35
AddrSpace::getAddrSize
uint4 getAddrSize(void) const
Get the size of the space.
Definition: space.hh:335
AddrSpaceManager::constructJoinAddress
Address constructJoinAddress(const Translate *translate, const Address &hiaddr, int4 hisz, const Address &loaddr, int4 losz)
Build a logical whole from register pairs.
Definition: translate.cc:760
FloatFormat
Encoding information for a single floating-point format.
Definition: float.hh:30
PcodeEmit::restorePackedOp
const uint1 * restorePackedOp(const Address &addr, const uint1 *ptr, const AddrSpaceManager *trans)
Emit pcode directly from a packed byte stream.
Definition: translate.cc:984
Translate::allowContextSet
virtual void allowContextSet(bool val) const
Toggle whether disassembly is allowed to affect context.
Definition: translate.hh:347
AddrSpaceManager::getConstantSpace
AddrSpace * getConstantSpace(void) const
Get the constant space.
Definition: translate.hh:508
AssemblyEmit
Abstract class for emitting disassembly to an application.
Definition: translate.hh:118
Translate::registerContext
virtual void registerContext(const string &name, int4 sbit, int4 ebit)
Add a new context variable to the model for this processor.
Definition: translate.hh:328
AddrSpaceManager::truncateSpace
void truncateSpace(const TruncationTag &tag)
Mark a space as truncated from its original size.
Definition: translate.cc:719
AddrSpaceManager::getConstant
Address getConstant(uintb val) const
Get a constant encoded as an Address.
Definition: translate.hh:518
AddrSpaceManager::createConstFromSpace
Address createConstFromSpace(AddrSpace *spc) const
Create a constant address encoding an address space.
Definition: translate.hh:528
Translate::setDefaultFloatFormats
void setDefaultFloatFormats(void)
If no explicit float formats, set up default formats.
Definition: translate.cc:862
AddrSpaceManager::numSpaces
int4 numSpaces(void) const
Get the number of address spaces for this processor.
Definition: translate.hh:536
JoinRecord
A record describing how logical values are split.
Definition: translate.hh:195
PcodeEmit::unpackOffset
static const uint1 * unpackOffset(const uint1 *ptr, uintb &off)
Helper function for unpacking an offset from a pcode byte stream.
Definition: translate.cc:934
AddrSpaceManager::getJoinSpace
AddrSpace * getJoinSpace(void) const
Get the joining space.
Definition: translate.hh:461
SpacebaseSpace::restoreXml
virtual void restoreXml(const Element *el)
Recover the details of this space from XML.
Definition: translate.cc:114
AddrSpaceManager::markNearPointers
void markNearPointers(AddrSpace *spc, int4 size)
Mark that given space can be accessed with near pointers.
Definition: translate.cc:521
JoinRecordCompare
Comparator for JoinRecord objects.
Definition: translate.hh:209
Translate::setUniqueBase
void setUniqueBase(uintm val)
Set the base offset for new temporary registers.
Definition: translate.hh:564
SpacebaseSpace::SpacebaseSpace
SpacebaseSpace(AddrSpaceManager *m, const Translate *t, const string &nm, int4 ind, int4 sz, AddrSpace *base, int4 dl)
Definition: translate.cc:38
Translate::setContextDefault
virtual void setContextDefault(const string &name, uintm val)
Set the default value for a particular context variable.
Definition: translate.hh:337
AddrSpaceManager::getSpaceByShortcut
AddrSpace * getSpaceByShortcut(char sc) const
Get address space from its shortcut.
Definition: translate.cc:548
AddrSpaceManager::getSpace
AddrSpace * getSpace(int4 i) const
Get an address space via its index.
Definition: translate.hh:545
float.hh
Support for decoding different floating-point formats.
AddrSpaceManager::assignShortcut
void assignShortcut(AddrSpace *spc)
Select a shortcut character for a new space.
Definition: translate.cc:461
PcodeEmit::unpackVarnodeData
static const uint1 * unpackVarnodeData(const uint1 *ptr, VarnodeData &v, const AddrSpaceManager *trans)
Helper function for unpacking a varnode from a pcode byte stream.
Definition: translate.cc:956
Element
An XML element. A node in the DOM tree.
Definition: xml.hh:150
Translate::setBigEndian
void setBigEndian(bool val)
Set general endianness to big if val is true.
Definition: translate.hh:553
SpacebaseSpace::numSpacebase
virtual int4 numSpacebase(void) const
Number of base registers associated with this space.
Definition: translate.cc:83
AddressResolver
Abstract class for converting native constants to addresses.
Definition: translate.hh:140
JoinRecord::operator<
bool operator<(const JoinRecord &op2) const
Compare records lexigraphically by pieces.
Definition: translate.cc:158
AddrSpaceManager::getUniqueSpace
AddrSpace * getUniqueSpace(void) const
Get the temporary register space for this processor.
Definition: translate.hh:482
BadDataError
Exception for bad instruction data.
Definition: translate.hh:50
VarnodeData::size
uint4 size
The number of bytes in the location.
Definition: pcoderaw.hh:36
AddrSpaceManager::constructFloatExtensionAddress
Address constructFloatExtensionAddress(const Address &realaddr, int4 realsize, int4 logicalsize)
Build a logically lower precision storage location for a bigger floating point register.
Definition: translate.cc:735
AddrSpaceManager::getDefaultCodeSpace
AddrSpace * getDefaultCodeSpace(void) const
Get the default address space of this processor.
Definition: translate.hh:491
AddrSpaceManager::findJoinInternal
JoinRecord * findJoinInternal(uintb offset) const
Find JoinRecord for offset in the join space.
Definition: translate.cc:665
AddrSpaceManager::setDefaultDataSpace
void setDefaultDataSpace(int4 index)
Set the default address space for data.
Definition: translate.cc:268
Translate::Translate
Translate(void)
Constructor for the translator.
Definition: translate.cc:851
TruncationTag
Object for describing how a space should be truncated.
Definition: translate.hh:63
UnimplError::instruction_length
int4 instruction_length
Definition: translate.hh:36
PcodeEmit::dump
virtual void dump(const Address &addr, OpCode opc, VarnodeData *outvar, VarnodeData *vars, int4 isize)=0
The main pcode emit method.
Translate::getUserOpNames
virtual void getUserOpNames(vector< string > &res) const =0
Get a list of all user-defined pcode ops.
AddrSpaceManager::renormalizeJoinAddress
void renormalizeJoinAddress(Address &addr, int4 size)
Make sure a possibly offset join address has a proper JoinRecord.
Definition: translate.cc:813
Address
A low-level machine address for labelling bytes and data.
Definition: address.hh:46
AddrSpaceManager::getIopSpace
AddrSpace * getIopSpace(void) const
Get the internal pcode op space.
Definition: translate.hh:443
SpacebaseSpace
A virtual space stack space.
Definition: translate.hh:170
Translate::instructionLength
virtual int4 instructionLength(const Address &baseaddr) const =0
Get the length of a machine instruction.
Translate::addRegister
virtual void addRegister(const string &nm, AddrSpace *base, uintb offset, int4 size)=0
Add a named register to the model for this processor.
AddrSpaceManager::setInferPtrBounds
void setInferPtrBounds(const Range &range)
Set the range of addresses that can be inferred as pointers.
Definition: translate.cc:427
AddrSpaceManager::setDefaultCodeSpace
void setDefaultCodeSpace(int4 index)
Set the default address space (for code)
Definition: translate.cc:254
AddrSpaceManager::resolveConstant
Address resolveConstant(AddrSpace *spc, uintb val, int4 sz, const Address &point, uintb &fullEncoding) const
Resolve a native constant into an Address.
Definition: translate.cc:572
TruncationTag::restoreXml
void restoreXml(const Element *el)
Restore this from XML.
Definition: translate.cc:20
AddrSpaceManager::getDefaultDataSpace
AddrSpace * getDefaultDataSpace(void) const
Get the default address space where data is stored.
Definition: translate.hh:500
Translate
The interface to a translation engine for a processor.
Definition: translate.hh:294
SpacebaseSpace::saveXml
virtual void saveXml(ostream &s) const
Write the details of this space as XML.
Definition: translate.cc:105
AddrSpaceManager::findAddJoin
JoinRecord * findAddJoin(const vector< VarnodeData > &pieces, uint4 logicalsize)
Get (or create) JoinRecord for pieces.
Definition: translate.cc:614
Range
A contiguous range of bytes in some address space.
Definition: address.hh:161
AddrSpaceManager::getStackSpace
AddrSpace * getStackSpace(void) const
Get the stack space for this processor.
Definition: translate.hh:470
AddressResolver::resolve
virtual Address resolve(uintb val, int4 sz, const Address &point, uintb &fullEncoding)=0
Virtual destructor
OpCode
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
AddrSpaceManager::insertSpace
void insertSpace(AddrSpace *spc)
Add a new address space to the model.
Definition: translate.cc:297
Translate::getRegister
virtual const VarnodeData & getRegister(const string &nm) const =0
Get a register as VarnodeData given its name.
UnimplError::UnimplError
UnimplError(const string &s, int4 l)
Constructor.
Definition: translate.hh:41
SpacebaseSpace::getSpacebaseFull
virtual const VarnodeData & getSpacebaseFull(int4 i) const
Return original spacebase register before truncation.
Definition: translate.cc:97
AddrSpaceManager::setReverseJustified
void setReverseJustified(AddrSpace *spc)
Set reverse justified property on this space.
Definition: translate.cc:283
AddrSpaceManager::getNextSpaceInOrder
AddrSpace * getNextSpaceInOrder(AddrSpace *spc) const
Get the next contiguous address space.
Definition: translate.cc:591
AddrSpaceManager::getSpaceByName
AddrSpace * getSpaceByName(const string &nm) const
Get address space by name.
Definition: translate.cc:534
AddrSpace::getContain
virtual AddrSpace * getContain(void) const
Return this space's containing space (if any)
Definition: space.hh:487
AssemblyEmit::dump
virtual void dump(const Address &addr, const string &mnem, const string &body)=0
The main disassembly emitting method.
AddrSpaceManager::getFspecSpace
AddrSpace * getFspecSpace(void) const
Get the internal callspec space.
Definition: translate.hh:452
AddrSpaceManager::addSpacebasePointer
void addSpacebasePointer(SpacebaseSpace *basespace, const VarnodeData &ptrdata, int4 truncSize, bool stackGrowth)
Set the base register of a spacebase space.
Definition: translate.cc:404
VarnodeData
Data defining a specific memory location.
Definition: pcoderaw.hh:33
Translate::floatformats
vector< FloatFormat > floatformats
Floating point formats utilized by the processor.
Definition: translate.hh:299
pcoderaw.hh
Raw descriptions of varnodes and p-code ops.
AddrSpaceManager::~AddrSpaceManager
virtual ~AddrSpaceManager(void)
Destroy the manager.
Definition: translate.cc:436
DocumentStorage
A container for parsed XML documents.
Definition: xml.hh:249
AddrSpaceManager::restoreXmlSpaces
void restoreXmlSpaces(const Element *el, const Translate *trans)
Restore address spaces in the model from an XML tag.
Definition: translate.cc:228
SpacebaseSpace::getSpacebase
virtual const VarnodeData & getSpacebase(int4 i) const
Get a base register that creates this virtual space.
Definition: translate.cc:89
JoinRecord::getEquivalentAddress
Address getEquivalentAddress(uintb offset, int4 &pos) const
Given offset in join space, get equivalent address of piece.
Definition: translate.cc:127
AddrSpaceManager
A manager for different address spaces.
Definition: translate.hh:218
AddrSpaceManager::getDefaultSize
int4 getDefaultSize(void) const
Get size of addresses for the default space.
Definition: translate.hh:434
Translate::getAlignment
int4 getAlignment(void) const
Get the instruction alignment for the processor.
Definition: translate.hh:582
Translate::getUniqueBase
uintm getUniqueBase(void) const
Get the base offset for new temporary registers.
Definition: translate.hh:592
AddrSpaceManager::setDeadcodeDelay
void setDeadcodeDelay(AddrSpace *spc, int4 delaydelta)
Set the deadcodedelay for a specific space.
Definition: translate.cc:711
SpacebaseSpace::stackGrowsNegative
virtual bool stackGrowsNegative(void) const
Return true if a stack in this space grows negative.
Definition: translate.hh:184
Translate::isBigEndian
bool isBigEndian(void) const
Is the processor big endian?
Definition: translate.hh:572
Translate::initialize
virtual void initialize(DocumentStorage &store)=0
Initialize the translator given XML configuration documents.
Translate::getFloatFormat
const FloatFormat * getFloatFormat(int4 size) const
Get format for a particular floating point encoding.
Definition: translate.cc:877
BadDataError::BadDataError
BadDataError(const string &s)
Constructor.
Definition: translate.hh:54