Commit c493057b authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r360439:

------------------------------------------------------------------------
r360439 | maskray | 2019-05-10 09:24:57 -0700 (Fri, 10 May 2019) | 8 lines

[llvm-objdump] Print st_other

Add support for ".hidden" ".internal" ".protected" and " 0x%02x" for
other st_other bits used by some architectures.

Reviewed By: sfertile

Differential Revision: https://reviews.llvm.org/D61718
------------------------------------------------------------------------

llvm-svn: 362668
parent d95b14d0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
# CHECK-NOT: yy

# CHECK: SYMBOL TABLE:
# CHECK: xx 00000000 __start_xx
# CHECK:   xx    00000000 .protected __start_xx
# CHECK: w *UND* 00000000 __start_yy

.weak __start_xx
+3 −3
Original line number Diff line number Diff line
@@ -40,8 +40,8 @@
# EL-NEXT:      2002c:       00 94 e8 ff     b       -44

# SYM: 00037ff0         .got   00000000 .hidden _gp
# SYM: 00020000 g F     .text           00000000 foo
# SYM: 00020010         .text           00000000 __start
# SYM: 00020000 g F     .text  00000000 0x80 foo
# SYM: 00020010         .text  00000000 0x80 __start

  .text
  .set micromips
+2 −2
Original line number Diff line number Diff line
@@ -26,8 +26,8 @@
# EL-NEXT:    20014:  7f 80 f6 ff  beqzc  $3, -36
# EL-NEXT:    20018:  ff b7 f4 ff  balc   -24 <foo>

# SYM: 00020000 g F     .text           00000000 foo
# SYM: 00020010         .text           00000000 __start
# SYM: 00020000 g F     .text  00000000 0x80 foo
# SYM: 00020010         .text  00000000 0x80 __start

  .text
  .set micromips
+37 −0
Original line number Diff line number Diff line
# RUN: yaml2obj %s -o %t
# RUN: llvm-objdump --syms %t | FileCheck %s

# CHECK:      SYMBOL TABLE:
# CHECK-NEXT: .text  00000000 default
# CHECK-NEXT: .text  00000000 .internal internal
# CHECK-NEXT: .text  00000000 .hidden hidden
# CHECK-NEXT: .text  00000000 .protected protected
# CHECK-NEXT: .text  00000000 0x20 mips_pic

!ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_MIPS
  Flags:   [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
Sections:
  - Name: .text
    Type: SHT_PROGBITS
    Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Symbols:
  Local:
    - Name:    default
      Section: .text
    - Name:    internal
      Visibility: STV_INTERNAL
      Section: .text
    - Name:    hidden
      Visibility: STV_HIDDEN
      Section: .text
    - Name:    protected
      Visibility: STV_PROTECTED
      Section: .text
    - Name:    mips_pic
      Other:   [ STO_MIPS_PIC ]
      Section: .text
+24 −6
Original line number Diff line number Diff line
@@ -2087,20 +2087,38 @@ void llvm::printSymbolTable(const ObjectFile *O, StringRef ArchiveName,
      outs() << SectionName;
    }

    outs() << '\t';
    if (Common || isa<ELFObjectFileBase>(O)) {
      uint64_t Val =
          Common ? Symbol.getAlignment() : ELFSymbolRef(Symbol).getSize();
      outs() << format("\t %08" PRIx64 " ", Val);
      outs() << format("\t%08" PRIx64, Val);
    }

    if (Hidden)
    if (isa<ELFObjectFileBase>(O)) {
      uint8_t Other = ELFSymbolRef(Symbol).getOther();
      switch (Other) {
      case ELF::STV_DEFAULT:
        break;
      case ELF::STV_INTERNAL:
        outs() << " .internal";
        break;
      case ELF::STV_HIDDEN:
        outs() << " .hidden";
        break;
      case ELF::STV_PROTECTED:
        outs() << " .protected";
        break;
      default:
        outs() << format(" 0x%02x", Other);
        break;
      }
    } else if (Hidden) {
      outs() << " .hidden";
    }

    if (Demangle)
      outs() << demangle(Name) << '\n';
      outs() << ' ' << demangle(Name) << '\n';
    else
      outs() << Name << '\n';
      outs() << ' ' << Name << '\n';
  }
}