================ @@ -2300,9 +2301,40 @@ llvm::Expected<Value> DWARFExpression::Evaluate( break; } + case DW_OP_WASM_location: { + uint8_t wasm_op = opcodes.GetU8(&offset); + uint32_t index; + + /* LLDB doesn't have an address space to represents WebAssembly locals, + * globals and operand stacks. + * We encode these elements into virtual registers: + * | tag: 2 bits | index: 30 bits | + * where tag is: + * 0: Not a WebAssembly location + * 1: Local + * 2: Global + * 3: Operand stack value + */ + if (wasm_op == 3) { + index = opcodes.GetU32(&offset); + wasm_op = 2; // Global + } else { + index = opcodes.GetULEB128(&offset); ---------------- DavidSpickett wrote:
This gets into a uint32 and there is 128 in the function name. Seems risky. Is there a check here, or some template magic so that it's not going to parse a massive number? Also the ULEB is just a way of storing numbers in DWARF, so the EB refers to this format, and this format is used in big endian program files as well as little. Correct? https://github.com/llvm/llvm-project/pull/151010 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits