aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSid Nayyar <sidnayyar@google.com>2023-11-10 14:02:59 +0000
committerGiuliano Procida <gprocida@google.com>2023-11-15 09:14:29 +0000
commit6bd097821ddfd15cf82a09fc8b1ba4934c579bb8 (patch)
treef410bd7789f37b1c994da15e5a707c8ebd0c4c0c
parentb7cd84c672ca2040466dc3c492b7837fa8147ca6 (diff)
downloadstg-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
-rw-r--r--proto_writer.cc10
-rw-r--r--test_cases/abigail_reader/composite/expected/abstract_base_class_cc.abi_stg12
-rw-r--r--test_cases/abigail_reader/composite/expected/virtual_only_base_class_cc.abi_stg12
-rw-r--r--test_cases/abigail_reader/function/expected/virtual_method_cc.abi_stg12
-rw-r--r--test_cases/info_tests/composite/expected/abstract_base_class_cc.elf_stg12
-rw-r--r--test_cases/info_tests/composite/expected/virtual_only_base_class_cc.elf_stg12
-rw-r--r--test_cases/info_tests/function/expected/virtual_method_cc.elf_stg12
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"