Browse Source

ProfileViewer: Interpret addresses >= 0xc0000000 as kernel frames

Andreas Kling 5 years ago
parent
commit
efbdaaaa65
2 changed files with 3 additions and 2 deletions
  1. 2 1
      DevTools/ProfileViewer/Profile.cpp
  2. 1 1
      DevTools/ProfileViewer/ProfileModel.cpp

+ 2 - 1
DevTools/ProfileViewer/Profile.cpp

@@ -35,7 +35,8 @@ Profile::Profile(const JsonArray& json)
         if (frames_array.size() < 2)
             continue;
 
-        sample.in_kernel = frames_array.at(1).as_object().get("address").to_number<u32>() < (8 * MB);
+        u32 innermost_frame_address = frames_array.at(1).as_object().get("address").to_number<u32>();
+        sample.in_kernel = innermost_frame_address >= 0xc0000000 || innermost_frame_address < (8 * MB);
 
         for (int i = frames_array.size() - 1; i >= 1; --i) {
             auto& frame_value = frames_array.at(i);

+ 1 - 1
DevTools/ProfileViewer/ProfileModel.cpp

@@ -92,7 +92,7 @@ GVariant ProfileModel::data(const GModelIndex& index, Role role) const
     auto* node = static_cast<ProfileNode*>(index.internal_data());
     if (role == Role::Icon) {
         if (index.column() == Column::StackFrame) {
-            if (node->address() < (8 * MB))
+            if (node->address() < (8 * MB) || node->address() >= 0xc0000000)
                 return m_kernel_frame_icon;
             return m_user_frame_icon;
         }