From 51ff19e85e8d6b453e8c19e054588553dc172fde Mon Sep 17 00:00:00 2001 From: prozak Date: Tue, 15 Feb 2022 00:05:04 -0800 Subject: [PATCH] Enable prog.type to work with classes Also added end to end CPP tests This is a prerequisite to #83 Signed-off-by: mykolal --- .../build-aux/gen_c_keywords_inc_strswitch.py | 1 + libdrgn/language_c.c | 6 +- tests/libdrgn.py | 1 + tests/sample.cpp.coredump.zst | Bin 0 -> 15128 bytes tests/test_e2e_cpp.py | 59 ++++++++++++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 tests/sample.cpp.coredump.zst create mode 100644 tests/test_e2e_cpp.py diff --git a/libdrgn/build-aux/gen_c_keywords_inc_strswitch.py b/libdrgn/build-aux/gen_c_keywords_inc_strswitch.py index 8676e88d9..7a7483a2f 100755 --- a/libdrgn/build-aux/gen_c_keywords_inc_strswitch.py +++ b/libdrgn/build-aux/gen_c_keywords_inc_strswitch.py @@ -8,6 +8,7 @@ "_Complex", "char", "const", + "class", "double", "enum", "float", diff --git a/libdrgn/language_c.c b/libdrgn/language_c.c index 6d6343fdf..572f79162 100644 --- a/libdrgn/language_c.c +++ b/libdrgn/language_c.c @@ -1643,6 +1643,7 @@ enum { MAX_QUALIFIER_TOKEN = C_TOKEN_ATOMIC, C_TOKEN_STRUCT, C_TOKEN_UNION, + C_TOKEN_CLASS, C_TOKEN_ENUM, MAX_KEYWORD_TOKEN = C_TOKEN_ENUM, C_TOKEN_LPAREN, @@ -2107,7 +2108,8 @@ c_parse_specifier_qualifier_list(struct drgn_program *prog, identifier_len = token.len; } else if (token.kind == C_TOKEN_STRUCT || token.kind == C_TOKEN_UNION || - token.kind == C_TOKEN_ENUM) { + token.kind == C_TOKEN_ENUM || + token.kind == C_TOKEN_CLASS) { if (identifier) { return drgn_error_format(DRGN_ERROR_SYNTAX, "cannot combine '%s' with identifier", @@ -2148,6 +2150,8 @@ c_parse_specifier_qualifier_list(struct drgn_program *prog, kind = DRGN_TYPE_UNION; } else if (tag_token == C_TOKEN_ENUM) { kind = DRGN_TYPE_ENUM; + } else if (tag_token == C_TOKEN_CLASS) { + kind = DRGN_TYPE_CLASS; } else if (identifier) { if (strstartswith(identifier, "size_t")) { err = drgn_program_find_primitive_type(prog, diff --git a/tests/libdrgn.py b/tests/libdrgn.py index dba4dbb14..5d0f62f74 100644 --- a/tests/libdrgn.py +++ b/tests/libdrgn.py @@ -175,6 +175,7 @@ class C_TOKEN(enum.IntEnum): ATOMIC = auto() STRUCT = auto() UNION = auto() + CLASS = auto() ENUM = auto() LPAREN = auto() RPAREN = auto() diff --git a/tests/sample.cpp.coredump.zst b/tests/sample.cpp.coredump.zst new file mode 100644 index 0000000000000000000000000000000000000000..e342932982437f4d8d2cb26984cb3ea992c3de70 GIT binary patch literal 15128 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 GlDelEj}h7c literal 0 HcmV?d00001 diff --git a/tests/test_e2e_cpp.py b/tests/test_e2e_cpp.py new file mode 100644 index 000000000..ebf630285 --- /dev/null +++ b/tests/test_e2e_cpp.py @@ -0,0 +1,59 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# SPDX-License-Identifier: GPL-3.0-or-later + +import os +import os.path +import subprocess +import tempfile +import unittest + +from drgn import Program +from tests import TestCase + + +class TestE2ECPP(TestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + with tempfile.NamedTemporaryFile() as core_dump_file: + try: + subprocess.check_call( + [ + "zstd", + "--quiet", + "--decompress", + "--stdout", + "tests/sample.cpp.coredump.zst", + ], + stdout=core_dump_file, + ) + except FileNotFoundError: + raise unittest.SkipTest("zstd not found") + cls.prog = Program() + cls.prog.set_core_dump(core_dump_file.name) + try: + cls.prog.load_default_debug_info() + except MissingDebugInfoError: + pass + + def test_struct_e2e(self): + self.assertSequenceEqual( + "struct S {\n" + "\tint def;\n" + "\tint pub;\n" + "\tint pri;\n" + "\tint prt;\n" + "}", + self.prog.type("struct S").__str__() + ) + + def test_class_e2e(self): + self.assertSequenceEqual( + "class A {\n" + "\tint def;\n" + "\tint pub;\n" + "\tint pri;\n" + "\tint prt;\n" + "}", + self.prog.type("class A").__str__() + )