Browse Source

LibDebug: Use `Core::Stream` to read opcodes for expression evaluation

Tim Schumacher 2 years ago
parent
commit
a9eea2e0c4

+ 1 - 1
Userland/Libraries/LibDebug/DebugInfo.cpp

@@ -231,7 +231,7 @@ static ErrorOr<void> parse_variable_location(Dwarf::DIE const& variable_die, Deb
         break;
         break;
     case Dwarf::AttributeValue::Type::DwarfExpression: {
     case Dwarf::AttributeValue::Type::DwarfExpression: {
         auto expression_bytes = location_info.value().as_raw_bytes();
         auto expression_bytes = location_info.value().as_raw_bytes();
-        auto value = Dwarf::Expression::evaluate(expression_bytes, regs);
+        auto value = TRY(Dwarf::Expression::evaluate(expression_bytes, regs));
 
 
         if (value.type != Dwarf::Expression::Type::None) {
         if (value.type != Dwarf::Expression::Type::None) {
             VERIFY(value.type == Dwarf::Expression::Type::UnsignedInteger);
             VERIFY(value.type == Dwarf::Expression::Type::UnsignedInteger);

+ 5 - 6
Userland/Libraries/LibDebug/Dwarf/Expression.cpp

@@ -7,18 +7,17 @@
 #include "Expression.h"
 #include "Expression.h"
 
 
 #include <AK/Format.h>
 #include <AK/Format.h>
-#include <AK/MemoryStream.h>
+#include <LibCore/MemoryStream.h>
 #include <sys/arch/regs.h>
 #include <sys/arch/regs.h>
 
 
 namespace Debug::Dwarf::Expression {
 namespace Debug::Dwarf::Expression {
 
 
-Value evaluate(ReadonlyBytes bytes, [[maybe_unused]] PtraceRegisters const& regs)
+ErrorOr<Value> evaluate(ReadonlyBytes bytes, [[maybe_unused]] PtraceRegisters const& regs)
 {
 {
-    InputMemoryStream stream(bytes);
+    auto stream = TRY(Core::Stream::FixedMemoryStream::construct(bytes));
 
 
-    while (!stream.eof()) {
-        u8 opcode = 0;
-        stream >> opcode;
+    while (!stream->is_eof()) {
+        auto opcode = TRY(stream->read_value<u8>());
 
 
         switch (static_cast<Operations>(opcode)) {
         switch (static_cast<Operations>(opcode)) {
 
 

+ 1 - 1
Userland/Libraries/LibDebug/Dwarf/Expression.h

@@ -32,6 +32,6 @@ enum class Operations : u8 {
     FbReg = 0x91,
     FbReg = 0x91,
 };
 };
 
 
-Value evaluate(ReadonlyBytes, PtraceRegisters const&);
+ErrorOr<Value> evaluate(ReadonlyBytes, PtraceRegisters const&);
 
 
 }
 }