File tree Expand file tree Collapse file tree 3 files changed +30
-2
lines changed Expand file tree Collapse file tree 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() {
896896 for (size_t i = 0 ; i < num_entries; i++) {
897897 FileRangeToIndexMap::Entry *entry =
898898 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) {
901907 const RangeVector<addr_t , addr_t >::Entry *containing_section =
902908 section_ranges.FindEntryThatContains (curr_base_addr);
903909
You can’t perform that action at this time.
0 commit comments