MCPcopy Create free account
hub / github.com/beefytech/Beef / ExecuteOps

Method ExecuteOps

IDEHelper/DbgModule.cpp:6815–7021  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6813}
6814
6815addr_target DbgModule::ExecuteOps(DbgSubprogram* dwSubprogram, const uint8* locData, int locDataLen, WdStackFrame* stackFrame, CPURegisters* registers, DbgAddrType* outAddrType, DbgEvalLocFlags flags, addr_target* pushValue)
6816{
6817 bool allowReg = (flags & DbgEvalLocFlag_IsParam) == 0;
6818
6819 const uint8* locDataEnd = locData + locDataLen;
6820 int regNum = -1;
6821
6822 addr_target stackFrameData[256];
6823 int stackIdx = 0;
6824
6825 if (pushValue != NULL)
6826 stackFrameData[stackIdx++] = *pushValue;
6827
6828 while (locData < locDataEnd)
6829 {
6830 uint8 opCode = GET_FROM(locData, uint8);
6831 switch (opCode)
6832 {
6833 case DW_OP_piece:
6834 {
6835 if (*outAddrType == DbgAddrType_Register)
6836 *outAddrType = DbgAddrType_Value;
6837 addr_target val = stackFrameData[--stackIdx];
6838 int pieceSize = (int)DecodeULEB128(locData);
6839 if (pieceSize == 4)
6840 val &= 0xFFFFFFFF;
6841 else if (pieceSize == 2)
6842 val &= 0xFFFF;
6843 else if (pieceSize == 1)
6844 val &= 0xFF;
6845 stackFrameData[stackIdx++] = val;
6846 }
6847 break;
6848 case DW_OP_consts:
6849 {
6850 int64 val = DecodeSLEB128(locData);
6851 stackFrameData[stackIdx++] = (addr_target)val;
6852 }
6853 break;
6854 case DW_OP_stack_value:
6855 {
6856 *outAddrType = DbgAddrType_Value;
6857 }
6858 break;
6859 case DW_OP_addr_noRemap:
6860 {
6861 addr_target addr = GET_FROM(locData, addr_target);
6862 stackFrameData[stackIdx++] = addr;
6863 //*outIsAddr = true;
6864 *outAddrType = DbgAddrType_Target;
6865 }
6866 break;
6867
6868 case DW_OP_addr:
6869 {
6870 addr_target addr = GET_FROM(locData, addr_target);
6871 //if (dwarf != NULL)
6872 addr = RemapAddr(addr);

Calls 4

DecodeULEB128Function · 0.85
DecodeSLEB128Function · 0.85
GetRootInlineParentMethod · 0.80
GetTLSOffsetMethod · 0.80

Tested by

no test coverage detected