File tree 3 files changed +30
-2
lines changed
3 files changed +30
-2
lines changed Original file line number Diff line number Diff line change
1
+ .text
2
+ .byte 0
3
+ sizeless:
4
+ sizeful:
5
+ .byte 0
6
+ .byte 0
7
+ sizeend:
8
+ .size sizeful, sizeend - sizeful
Original file line number Diff line number Diff line change
1
+ # Some targets do not have the .size directive.
2
+ # RUN: %clang -target x86_64-unknown-unknown-elf %S/Inputs/sizeless-symbol.s -c -o %t.o
3
+ # RUN: %lldb %t.o -s %s -o quit | FileCheck %s
4
+
5
+ image lookup --address 1
6
+ # CHECK: Summary: sizeless-symbol.test.tmp.o`sizeful
7
+ image lookup --address 2
8
+ # CHECK: Summary: sizeless-symbol.test.tmp.o`sizeful + 1
9
+ image dump symtab
10
+ # CHECK: Index UserID DSX Type File Address/Value Load Address Size Flags Name
11
+ # CHECK-NEXT:------- ------ --- --------------- ------------------ ------------------ ------------------ ---------- ----------------------------------
12
+ # CHECK-NEXT:[ 0] 1 Code 0x0000000000000003 0x0000000000000000 0x00000000 sizeend
13
+ # CHECK-NEXT:[ 1] 2 Code 0x0000000000000001 0x0000000000000002 0x00000000 sizeful
14
+ # CHECK-NEXT:[ 2] 3 Code 0x0000000000000001 0x0000000000000000 0x00000000 sizeless
Original file line number Diff line number Diff line change @@ -896,8 +896,14 @@ void Symtab::InitAddressIndexes() {
896
896
for (size_t i = 0 ; i < num_entries; i++) {
897
897
FileRangeToIndexMap::Entry *entry =
898
898
m_file_addr_to_index.GetMutableEntryAtIndex (i);
899
- if (entry->GetByteSize () == 0 ) {
900
- addr_t curr_base_addr = entry->GetRangeBase ();
899
+ if (entry->GetByteSize () > 0 )
900
+ continue ;
901
+ addr_t curr_base_addr = entry->GetRangeBase ();
902
+ // Symbols with non-zero size will show after zero-sized symbols on the
903
+ // same address. So do not set size of a non-last zero-sized symbol.
904
+ if (i == num_entries - 1 ||
905
+ m_file_addr_to_index.GetMutableEntryAtIndex (i + 1 )
906
+ ->GetRangeBase () != curr_base_addr) {
901
907
const RangeVector<addr_t , addr_t >::Entry *containing_section =
902
908
section_ranges.FindEntryThatContains (curr_base_addr);
903
909
You can’t perform that action at this time.
0 commit comments