Skip to content

Commit d76db62

Browse files
author
git apple-llvm automerger
committed
Merge commit '9f7e7f7d9c9f' from llvm.org/main into next
2 parents b91477a + 9f7e7f7 commit d76db62

File tree

2 files changed

+75
-48
lines changed

2 files changed

+75
-48
lines changed

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2811,32 +2811,29 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28112811
is_gsym = true;
28122812
sym[sym_idx].SetExternal(true);
28132813

2814-
if (symbol_name && symbol_name[0] == '_' &&
2815-
symbol_name[1] == 'O') {
2816-
llvm::StringRef symbol_name_ref(symbol_name);
2817-
if (symbol_name_ref.starts_with(
2818-
g_objc_v2_prefix_class)) {
2819-
symbol_name_non_abi_mangled = symbol_name + 1;
2820-
symbol_name =
2821-
symbol_name + g_objc_v2_prefix_class.size();
2822-
type = eSymbolTypeObjCClass;
2823-
demangled_is_synthesized = true;
2824-
2825-
} else if (symbol_name_ref.starts_with(
2826-
g_objc_v2_prefix_metaclass)) {
2827-
symbol_name_non_abi_mangled = symbol_name + 1;
2828-
symbol_name =
2829-
symbol_name + g_objc_v2_prefix_metaclass.size();
2830-
type = eSymbolTypeObjCMetaClass;
2831-
demangled_is_synthesized = true;
2832-
} else if (symbol_name_ref.starts_with(
2833-
g_objc_v2_prefix_ivar)) {
2834-
symbol_name_non_abi_mangled = symbol_name + 1;
2835-
symbol_name =
2836-
symbol_name + g_objc_v2_prefix_ivar.size();
2837-
type = eSymbolTypeObjCIVar;
2838-
demangled_is_synthesized = true;
2839-
}
2814+
llvm::StringRef symbol_name_ref(symbol_name);
2815+
if (symbol_name_ref.starts_with(
2816+
g_objc_v2_prefix_class)) {
2817+
symbol_name_non_abi_mangled = symbol_name + 1;
2818+
symbol_name =
2819+
symbol_name + g_objc_v2_prefix_class.size();
2820+
type = eSymbolTypeObjCClass;
2821+
demangled_is_synthesized = true;
2822+
2823+
} else if (symbol_name_ref.starts_with(
2824+
g_objc_v2_prefix_metaclass)) {
2825+
symbol_name_non_abi_mangled = symbol_name + 1;
2826+
symbol_name =
2827+
symbol_name + g_objc_v2_prefix_metaclass.size();
2828+
type = eSymbolTypeObjCMetaClass;
2829+
demangled_is_synthesized = true;
2830+
} else if (symbol_name_ref.starts_with(
2831+
g_objc_v2_prefix_ivar)) {
2832+
symbol_name_non_abi_mangled = symbol_name + 1;
2833+
symbol_name =
2834+
symbol_name + g_objc_v2_prefix_ivar.size();
2835+
type = eSymbolTypeObjCIVar;
2836+
demangled_is_synthesized = true;
28402837
} else {
28412838
if (nlist.n_value != 0)
28422839
symbol_section = section_info.GetSection(
@@ -3665,7 +3662,7 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653662

36663663
if (is_debug) {
36673664
switch (nlist.n_type) {
3668-
case N_GSYM:
3665+
case N_GSYM: {
36693666
// global symbol: name,,NO_SECT,type,0
36703667
// Sometimes the N_GSYM value contains the address.
36713668

@@ -3681,33 +3678,30 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36813678
is_gsym = true;
36823679
sym[sym_idx].SetExternal(true);
36833680

3684-
if (symbol_name && symbol_name[0] == '_' && symbol_name[1] == 'O') {
3685-
llvm::StringRef symbol_name_ref(symbol_name);
3686-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
3687-
symbol_name_non_abi_mangled = symbol_name + 1;
3688-
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
3689-
type = eSymbolTypeObjCClass;
3690-
demangled_is_synthesized = true;
3691-
3692-
} else if (symbol_name_ref.starts_with(
3693-
g_objc_v2_prefix_metaclass)) {
3694-
symbol_name_non_abi_mangled = symbol_name + 1;
3695-
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
3696-
type = eSymbolTypeObjCMetaClass;
3697-
demangled_is_synthesized = true;
3698-
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
3699-
symbol_name_non_abi_mangled = symbol_name + 1;
3700-
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
3701-
type = eSymbolTypeObjCIVar;
3702-
demangled_is_synthesized = true;
3703-
}
3681+
llvm::StringRef symbol_name_ref(symbol_name);
3682+
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
3683+
symbol_name_non_abi_mangled = symbol_name + 1;
3684+
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
3685+
type = eSymbolTypeObjCClass;
3686+
demangled_is_synthesized = true;
3687+
3688+
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
3689+
symbol_name_non_abi_mangled = symbol_name + 1;
3690+
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
3691+
type = eSymbolTypeObjCMetaClass;
3692+
demangled_is_synthesized = true;
3693+
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
3694+
symbol_name_non_abi_mangled = symbol_name + 1;
3695+
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
3696+
type = eSymbolTypeObjCIVar;
3697+
demangled_is_synthesized = true;
37043698
} else {
37053699
if (nlist.n_value != 0)
37063700
symbol_section =
37073701
section_info.GetSection(nlist.n_sect, nlist.n_value);
37083702
type = eSymbolTypeData;
37093703
}
3710-
break;
3704+
} break;
37113705

37123706
case N_FNAME:
37133707
// procedure name (f77 kludge): name,,NO_SECT,0,0
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Tests that LLDB correctly parses global symbols
2+
// starting with 'O'. On some platforms (e.g., Darwin)
3+
// C-symbols are prefixed with a '_'. The LLDB Macho-O
4+
// parses handles Objective-C metadata symbols starting
5+
// with '_OBJC' specially. This test ensures that we don't
6+
// lose track of regular global symbols with a '_O' prefix
7+
// in this.
8+
9+
// RUN: %clang_host -c -g -fno-common %s -o %t.o
10+
// RUN: %clang_host %t.o -o %t.out
11+
// RUN: %lldb -b -x %t.out \
12+
// RUN: -o "b 27" \
13+
// RUN: -o "run" \
14+
// RUN: -o "p OglobalVar" \
15+
// RUN: -o "p Oabc" | FileCheck %s
16+
17+
typedef struct {
18+
int a;
19+
} Oabc_t;
20+
21+
Oabc_t Oabc;
22+
int OglobalVar;
23+
24+
int main(int argc, const char *argv[]) {
25+
Oabc.a = 15;
26+
OglobalVar = 10;
27+
return OglobalVar + Oabc.a;
28+
}
29+
30+
// CHECK: (lldb) p OglobalVar
31+
// CHECK: (int) 10
32+
// CHECK: (lldb) p Oabc
33+
// CHECK: (Oabc_t) (a = 15)

0 commit comments

Comments
 (0)