diff options
author | Sid Nayyar <sidnayyar@google.com> | 2023-11-10 14:02:59 +0000 |
---|---|---|
committer | Giuliano Procida <gprocida@google.com> | 2023-11-15 09:14:29 +0000 |
commit | 6bd097821ddfd15cf82a09fc8b1ba4934c579bb8 (patch) | |
tree | f410bd7789f37b1c994da15e5a707c8ebd0c4c0c | |
parent | b7cd84c672ca2040466dc3c492b7837fa8147ca6 (diff) | |
download | stg-6bd097821ddfd15cf82a09fc8b1ba4934c579bb8.tar.gz |
proto: Sort methods by mangled name while printing
Sort `Method` nodes by mangled name and then unique external node ID.
PiperOrigin-RevId: 581229412
Change-Id: Idee11e5090304e41c3212c7875d69c1ceeeb0719
7 files changed, 45 insertions, 37 deletions
diff --git a/proto_writer.cc b/proto_writer.cc index 741064d..1a70291 100644 --- a/proto_writer.cc +++ b/proto_writer.cc @@ -434,6 +434,14 @@ void SortNodesByName(google::protobuf::RepeatedPtrField<ProtoNode>& nodes) { std::sort(nodes.pointer_begin(), nodes.pointer_end(), compare); } +void SortMethodsByMangledName(google::protobuf::RepeatedPtrField<Method>& methods) { + const auto compare = [](const Method* lhs, const Method* rhs) { + const int comparison = lhs->mangled_name().compare(rhs->mangled_name()); + return comparison < 0 || (comparison == 0 && lhs->id() < rhs->id()); + }; + std::sort(methods.pointer_begin(), methods.pointer_end(), compare); +} + void SortNodes(STG& stg) { SortNodesById(*stg.mutable_void_()); SortNodesById(*stg.mutable_variadic()); @@ -444,7 +452,7 @@ void SortNodes(STG& stg) { SortNodesById(*stg.mutable_primitive()); SortNodesById(*stg.mutable_array()); SortNodesById(*stg.mutable_base_class()); - SortNodesById(*stg.mutable_method()); + SortMethodsByMangledName(*stg.mutable_method()); SortNodesByName(*stg.mutable_member()); SortNodesByName(*stg.mutable_struct_union()); SortNodesByName(*stg.mutable_enumeration()); diff --git a/test_cases/abigail_reader/composite/expected/abstract_base_class_cc.abi_stg b/test_cases/abigail_reader/composite/expected/abstract_base_class_cc.abi_stg index 9fa823c..e4fca59 100644 --- a/test_cases/abigail_reader/composite/expected/abstract_base_class_cc.abi_stg +++ b/test_cases/abigail_reader/composite/expected/abstract_base_class_cc.abi_stg @@ -32,12 +32,6 @@ method { type_id: 0x9f577646 } method { - id: 0x63c715c4 - mangled_name: "_ZN1Y1fEv" - name: "f" - type_id: 0x99535d33 -} -method { id: 0xb8b6ef68 mangled_name: "_ZN1X1gEv" name: "g" @@ -45,6 +39,12 @@ method { type_id: 0x9f577646 } method { + id: 0x63c715c4 + mangled_name: "_ZN1Y1fEv" + name: "f" + type_id: 0x99535d33 +} +method { id: 0xe8e61433 mangled_name: "_ZN1Y1gEv" name: "g" diff --git a/test_cases/abigail_reader/composite/expected/virtual_only_base_class_cc.abi_stg b/test_cases/abigail_reader/composite/expected/virtual_only_base_class_cc.abi_stg index b99c5a1..a294342 100644 --- a/test_cases/abigail_reader/composite/expected/virtual_only_base_class_cc.abi_stg +++ b/test_cases/abigail_reader/composite/expected/virtual_only_base_class_cc.abi_stg @@ -32,12 +32,6 @@ method { type_id: 0x9f577646 } method { - id: 0x63c715c4 - mangled_name: "_ZN1Y1fEv" - name: "f" - type_id: 0x99535d33 -} -method { id: 0xb8b6ef68 mangled_name: "_ZN1X1gEv" name: "g" @@ -45,6 +39,12 @@ method { type_id: 0x9f577646 } method { + id: 0x63c715c4 + mangled_name: "_ZN1Y1fEv" + name: "f" + type_id: 0x99535d33 +} +method { id: 0xe8e61433 mangled_name: "_ZN1Y1gEv" name: "g" diff --git a/test_cases/abigail_reader/function/expected/virtual_method_cc.abi_stg b/test_cases/abigail_reader/function/expected/virtual_method_cc.abi_stg index 39dae5d..12b5c7d 100644 --- a/test_cases/abigail_reader/function/expected/virtual_method_cc.abi_stg +++ b/test_cases/abigail_reader/function/expected/virtual_method_cc.abi_stg @@ -10,18 +10,18 @@ pointer_reference { pointee_type_id: 0xf6f304f7 } method { + id: 0x91a60460 + mangled_name: "_ZN3Foo3barEv" + name: "bar" + type_id: 0x1d536fb5 +} +method { id: 0x3bae9a68 mangled_name: "_ZN3Foo3bazEv" name: "baz" vtable_offset: 1 type_id: 0x1d536fb5 } -method { - id: 0x91a60460 - mangled_name: "_ZN3Foo3barEv" - name: "bar" - type_id: 0x1d536fb5 -} struct_union { id: 0xf6f304f7 kind: STRUCT diff --git a/test_cases/info_tests/composite/expected/abstract_base_class_cc.elf_stg b/test_cases/info_tests/composite/expected/abstract_base_class_cc.elf_stg index 72921e1..b1beee3 100644 --- a/test_cases/info_tests/composite/expected/abstract_base_class_cc.elf_stg +++ b/test_cases/info_tests/composite/expected/abstract_base_class_cc.elf_stg @@ -47,12 +47,6 @@ method { type_id: 0x9f577646 } method { - id: 0x63c715c4 - mangled_name: "_ZN1Y1fEv" - name: "f" - type_id: 0x99535d33 -} -method { id: 0xb8b6ef68 mangled_name: "_ZN1X1gEv" name: "g" @@ -60,6 +54,12 @@ method { type_id: 0x9f577646 } method { + id: 0x63c715c4 + mangled_name: "_ZN1Y1fEv" + name: "f" + type_id: 0x99535d33 +} +method { id: 0xe8e61433 mangled_name: "_ZN1Y1gEv" name: "g" diff --git a/test_cases/info_tests/composite/expected/virtual_only_base_class_cc.elf_stg b/test_cases/info_tests/composite/expected/virtual_only_base_class_cc.elf_stg index a9a162b..a1f67b9 100644 --- a/test_cases/info_tests/composite/expected/virtual_only_base_class_cc.elf_stg +++ b/test_cases/info_tests/composite/expected/virtual_only_base_class_cc.elf_stg @@ -47,12 +47,6 @@ method { type_id: 0x9f577646 } method { - id: 0x63c715c4 - mangled_name: "_ZN1Y1fEv" - name: "f" - type_id: 0x99535d33 -} -method { id: 0xb8b6ef68 mangled_name: "_ZN1X1gEv" name: "g" @@ -60,6 +54,12 @@ method { type_id: 0x9f577646 } method { + id: 0x63c715c4 + mangled_name: "_ZN1Y1fEv" + name: "f" + type_id: 0x99535d33 +} +method { id: 0xe8e61433 mangled_name: "_ZN1Y1gEv" name: "g" diff --git a/test_cases/info_tests/function/expected/virtual_method_cc.elf_stg b/test_cases/info_tests/function/expected/virtual_method_cc.elf_stg index 4bc40c5..879c6a3 100644 --- a/test_cases/info_tests/function/expected/virtual_method_cc.elf_stg +++ b/test_cases/info_tests/function/expected/virtual_method_cc.elf_stg @@ -26,18 +26,18 @@ primitive { bytesize: 0x00000004 } method { + id: 0x91a60460 + mangled_name: "_ZN3Foo3barEv" + name: "bar" + type_id: 0x1d536fb5 +} +method { id: 0x3bae9a68 mangled_name: "_ZN3Foo3bazEv" name: "baz" vtable_offset: 1 type_id: 0x1d536fb5 } -method { - id: 0x91a60460 - mangled_name: "_ZN3Foo3barEv" - name: "bar" - type_id: 0x1d536fb5 -} member { id: 0xc9e943fb name: "_vptr$Foo" |