From 86e97e7dde700b597564f330dbe2d81e96be3830 Mon Sep 17 00:00:00 2001 From: Jon Haslam Date: Thu, 7 Dec 2023 05:33:20 -0800 Subject: [PATCH] Handle function drgn type when enumerating types --- oi/type_graph/DrgnParser.cpp | 7 +++++++ oi/type_graph/DrgnParser.h | 1 + 2 files changed, 8 insertions(+) diff --git a/oi/type_graph/DrgnParser.cpp b/oi/type_graph/DrgnParser.cpp index 0116edf5..96b98982 100644 --- a/oi/type_graph/DrgnParser.cpp +++ b/oi/type_graph/DrgnParser.cpp @@ -116,6 +116,9 @@ Type& DrgnParser::enumerateType(struct drgn_type* type) { case DRGN_TYPE_VOID: t = &enumeratePrimitive(type); break; + case DRGN_TYPE_FUNCTION: + t = &enumerateFunction(type); + break; default: throw DrgnParserError{"Unknown drgn type kind: " + std::to_string(kind)}; @@ -469,6 +472,10 @@ Type& DrgnParser::enumeratePointer(struct drgn_type* type) { return makeType(type, t); } +Type& DrgnParser::enumerateFunction(struct drgn_type* type) { + return makeType(type, Primitive::Kind::StubbedPointer); +} + Array& DrgnParser::enumerateArray(struct drgn_type* type) { struct drgn_type* elementType = drgn_type_type(type).type; uint64_t len = drgn_type_length(type); diff --git a/oi/type_graph/DrgnParser.h b/oi/type_graph/DrgnParser.h index 5b8fbe39..95dade15 100644 --- a/oi/type_graph/DrgnParser.h +++ b/oi/type_graph/DrgnParser.h @@ -62,6 +62,7 @@ class DrgnParser { Enum& enumerateEnum(struct drgn_type* type); Typedef& enumerateTypedef(struct drgn_type* type); Type& enumeratePointer(struct drgn_type* type); + Type& enumerateFunction(struct drgn_type* type); Array& enumerateArray(struct drgn_type* type); Primitive& enumeratePrimitive(struct drgn_type* type);