Skip to content

Commit

Permalink
Add parseAPI/IA_IAPI.h
Browse files Browse the repository at this point in the history
  • Loading branch information
hainest committed Apr 3, 2024
1 parent f3596fd commit 03c8f61
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 12 deletions.
91 changes: 89 additions & 2 deletions docs/parseAPI/developer/IA_IAPI.h.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,92 @@
.. _`sec:IA_IAPI.h`:

IA_IAPI.h
=========
#########

.. cpp:namespace:: Dyninst::ParseAPI

.. cpp:class:: IA_IAPI : public InstructionAdapter

.. cpp:type:: std::vector<std::pair<Address, Dyninst::InstructionAPI::Instruction>> allInsns_t

.. cpp:member:: protected Dyninst::InstructionAPI::InstructionDecoder dec

Decoded instruction cache: contains the linear sequence of instructions decoded by the decoder underlying this adapter.

.. cpp:member:: protected allInsns_t::iterator curInsnIter
.. cpp:member:: protected mutable bool validCFT
.. cpp:member:: protected mutable std::pair<bool, Address> cachedCFT
.. cpp:member:: protected mutable bool validLinkerStubState
.. cpp:member:: protected mutable bool cachedLinkerStubState
.. cpp:member:: protected mutable std::pair<bool, bool> hascftstatus
.. cpp:member:: protected mutable std::map<ParseAPI::EdgeTypeEnum, bool> tailCalls
.. cpp:member:: protected static std::once_flag ptrInit
.. cpp:member:: protected static std::map<Architecture, Dyninst::InstructionAPI::RegisterAST::Ptr> framePtr
.. cpp:member:: protected static std::map<Architecture, Dyninst::InstructionAPI::RegisterAST::Ptr> stackPtr
.. cpp:member:: protected static std::map<Architecture, Dyninst::InstructionAPI::RegisterAST::Ptr> thePC
.. cpp:member:: protected static std::map<Address, bool> thunkAtTarget
.. cpp:member:: protected allInsns_t allInsns

.. cpp:function:: protected static void initASTs()
.. cpp:function:: InstructionAPI::Instruction current_instruction()
.. cpp:function:: IA_IAPI(Dyninst::InstructionAPI::InstructionDecoder dec_, Address start_, Dyninst::ParseAPI::CodeObject* o, Dyninst::ParseAPI::CodeRegion* r, Dyninst::InstructionSource *isrc, Dyninst::ParseAPI::Block * curBlk_)
.. cpp:function:: IA_IAPI(const IA_IAPI &)
.. cpp:function:: IA_IAPI &operator=(const IA_IAPI &r)
.. cpp:function:: static IA_IAPI* makePlatformIA_IAPI(Dyninst::Architecture arch, Dyninst::InstructionAPI::InstructionDecoder dec_, Address start_, Dyninst::ParseAPI::CodeObject* o, Dyninst::ParseAPI::CodeRegion* r, Dyninst::InstructionSource *isrc, Dyninst::ParseAPI::Block * curBlk_)
.. cpp:function:: virtual IA_IAPI* clone() const = 0
.. cpp:function:: virtual void reset(Dyninst::InstructionAPI::InstructionDecoder dec_, Address start, ParseAPI::CodeObject *o, ParseAPI::CodeRegion *r, InstructionSource *isrc, ParseAPI::Block *)
.. cpp:function:: virtual const Dyninst::InstructionAPI::Instruction& getInstruction() const
.. cpp:function:: virtual bool hasCFT() const
.. cpp:function:: virtual size_t getSize() const
.. cpp:function:: virtual bool isFrameSetupInsn() const
.. cpp:function:: virtual bool isAbort() const
.. cpp:function:: virtual bool isInvalidInsn() const
.. cpp:function:: virtual bool isGarbageInsn() const

``true`` for insns indicative of bad parse, for defensive mode.

.. cpp:function:: virtual void getNewEdges(std::vector<std::pair<Address, Dyninst::ParseAPI::EdgeTypeEnum>>& outEdges, \
Dyninst::ParseAPI::Function * context, Dyninst::ParseAPI::Block * currBlk, \
unsigned int num_insns, dyn_hash_map<Address, std::string> *pltFuncs, \
const set<Address>& knownTargets) const
.. cpp:function:: virtual InstrumentableLevel getInstLevel(Dyninst::ParseAPI::Function *, unsigned int num_insns ) const
.. cpp:function:: virtual bool isDynamicCall() const
.. cpp:function:: virtual bool isAbsoluteCall() const
.. cpp:function:: virtual bool simulateJump() const
.. cpp:function:: virtual void advance()
.. cpp:function:: virtual bool retreat()
.. cpp:function:: virtual bool isNop() const = 0
.. cpp:function:: virtual bool isLeave() const
.. cpp:function:: virtual bool isDelaySlot() const
.. cpp:function:: virtual bool isRelocatable(InstrumentableLevel lvl) const
.. cpp:function:: virtual bool isTailCall(const ParseAPI::Function *, Dyninst::ParseAPI::EdgeTypeEnum, unsigned int, const std::set<Address> &) const = 0
.. cpp:function:: virtual std::pair<bool, Address> getCFT() const
.. cpp:function:: virtual bool isStackFramePreamble() const = 0
.. cpp:function:: virtual bool savesFP() const = 0
.. cpp:function:: virtual bool cleansStack() const = 0
.. cpp:function:: virtual bool isConditional() const
.. cpp:function:: virtual bool isBranch() const
.. cpp:function:: virtual bool isInterruptOrSyscall() const
.. cpp:function:: virtual bool isSyscall() const
.. cpp:function:: virtual bool isInterrupt() const
.. cpp:function:: virtual bool isCall() const
.. cpp:function:: virtual bool isReturnAddrSave(Address &ret_addr) const = 0
.. cpp:function:: virtual bool isNopJump() const = 0
.. cpp:function:: virtual bool sliceReturn(ParseAPI::Block* bit, Address ret_addr, ParseAPI::Function * func) const = 0
.. cpp:function:: virtual bool isIATcall(std::string &calleeName) const = 0
.. cpp:function:: virtual bool isThunk() const = 0
.. cpp:function:: virtual bool isIndirectJump() const

.. cpp:namespace:: Dyninst::parseAPI
.. cpp:function:: protected virtual bool isRealCall() const
.. cpp:function:: protected virtual bool parseJumpTable(Dyninst::ParseAPI::Function * currFunc, Dyninst::ParseAPI::Block* currBlk, std::vector<std::pair< Address, Dyninst::ParseAPI::EdgeTypeEnum > >& outEdges) const
.. cpp:function:: protected virtual bool isIPRelativeBranch() const
.. cpp:function:: protected virtual bool isFrameSetupInsn(Dyninst::InstructionAPI::Instruction i) const = 0
.. cpp:function:: protected virtual bool isReturn(Dyninst::ParseAPI::Function *, Dyninst::ParseAPI::Block* currBlk) const = 0
.. cpp:function:: protected virtual bool isFakeCall() const = 0
.. cpp:function:: protected virtual bool isLinkerStub() const = 0
.. cpp:function:: protected virtual bool isSysEnter() const
.. cpp:function:: protected virtual void parseSyscall(std::vector<std::pair<Address, Dyninst::ParseAPI::EdgeTypeEnum> >& outEdges) const
.. cpp:function:: protected virtual void parseSysEnter(std::vector<std::pair<Address, Dyninst::ParseAPI::EdgeTypeEnum> >& outEdges) const
.. cpp:function:: protected std::pair<bool, Address> getFallthrough() const
.. cpp:function:: protected const InstructionAPI::Instruction & curInsn() const;

25 changes: 23 additions & 2 deletions docs/parseAPI/developer/IA_amdgpu.h.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
.. _`sec:IA_amdgpu.h`:

IA_amdgpu.h
===========
###########

.. cpp:namespace:: Dyninst::ParseAPI

.. cpp:namespace:: Dyninst::parseAPI
.. cpp:class:: IA_amdgpu : public IA_IAPI

.. cpp:function:: IA_amdgpu(Dyninst::InstructionAPI::InstructionDecoder dec_, Address start_, Dyninst::ParseAPI::CodeObject* o, Dyninst::ParseAPI::CodeRegion* r, Dyninst::InstructionSource *isrc, Dyninst::ParseAPI::Block * curBlk_)
.. cpp:function:: IA_amdgpu(const IA_amdgpu &)
.. cpp:function:: virtual IA_amdgpu* clone() const
.. cpp:function:: virtual bool isFrameSetupInsn(Dyninst::InstructionAPI::Instruction) const
.. cpp:function:: virtual bool isNop() const
.. cpp:function:: virtual bool isThunk() const
.. cpp:function:: virtual bool isTailCall(const ParseAPI::Function* context, ParseAPI::EdgeTypeEnum type, unsigned int, const set<Address>& knownTargets) const
.. cpp:function:: virtual bool savesFP() const
.. cpp:function:: virtual bool isStackFramePreamble() const
.. cpp:function:: virtual bool cleansStack() const
.. cpp:function:: virtual bool sliceReturn(ParseAPI::Block* bit, Address ret_addr, ParseAPI::Function * func) const
.. cpp:function:: virtual bool isReturnAddrSave(Address& retAddr) const
.. cpp:function:: virtual bool isReturn(Dyninst::ParseAPI::Function * context, Dyninst::ParseAPI::Block* currBlk) const
.. cpp:function:: virtual bool isFakeCall() const
.. cpp:function:: virtual bool isIATcall(std::string &) const
.. cpp:function:: virtual bool isLinkerStub() const
.. cpp:function:: virtual bool isNopJump() const
8 changes: 0 additions & 8 deletions parseAPI/src/IA_IAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,14 +141,6 @@ class IA_IAPI : public InstructionAdapter {

Dyninst::InstructionAPI::InstructionDecoder dec;

/*
* Decoded instruction cache: contains the linear
* sequence of instructions decoded by the decoder
* underlying this adapter.
*
* - curInsnIter == *(allInsns.end()-1)
* - (super)->current = curInsnIter->first
*/
public:
typedef std::vector<
std::pair<Address,
Expand Down

0 comments on commit 03c8f61

Please sign in to comment.