mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[llvm-nm] Add --format=just-symbols and make --just-symbol-name its alias
https://sourceware.org/bugzilla/show_bug.cgi?id=27487 binutils will have --format=just-symbols/-j as well. Arbitrarily prefer `-j` to `--format=sysv`. Previously `--format=sysv -j` prints in the sysv format while `-j` takes precedence over other formats. Differential Revision: https://reviews.llvm.org/D98569
This commit is contained in:
parent
7fb4439f85
commit
d3961f8ad2
@ -149,7 +149,8 @@ OPTIONS
|
||||
|
||||
.. option:: --format=<format>, -f
|
||||
|
||||
Select an output format; *format* may be *sysv*, *posix*, *darwin*, or *bsd*.
|
||||
Select an output format; *format* may be *sysv*, *posix*, *darwin*, *bsd* or
|
||||
*just-symbols*.
|
||||
The default is *bsd*.
|
||||
|
||||
.. option:: --help, -h
|
||||
@ -162,7 +163,7 @@ OPTIONS
|
||||
|
||||
.. option:: --just-symbol-name, -j
|
||||
|
||||
Print just the symbol names.
|
||||
Print just the symbol names. Alias for `--format=just-symbols``.
|
||||
|
||||
.. option:: -m
|
||||
|
||||
|
@ -1,38 +0,0 @@
|
||||
## Show that the -j/--just-symbol-name prints only the the symbol name (except
|
||||
## in posix output).
|
||||
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
|
||||
# RUN: llvm-nm --just-symbol-name %t.o > %t.bsd.txt
|
||||
# RUN: llvm-nm -j %t.o > %t.j.txt
|
||||
# RUN: cmp %t.bsd.txt %t.j.txt
|
||||
|
||||
# RUN: FileCheck %s --input-file=%t.bsd.txt --implicit-check-not={{.}} --check-prefix=COMMON
|
||||
# RUN: llvm-nm -j %t.o --format=sysv | \
|
||||
# RUN: FileCheck %s --implicit-check-not={{.}} --check-prefixes=COMMON,SYSV -DFILE=%t.o
|
||||
# RUN: llvm-nm -j %t.o --format=posix | FileCheck %s --implicit-check-not={{.}} --check-prefix=POSIX
|
||||
|
||||
# SYSV: Symbols from [[FILE]]:
|
||||
# SYSV-EMPTY:
|
||||
# SYSV-NEXT: Name Value Class Type Size Line Section
|
||||
# COMMON: {{^}}defined{{$}}
|
||||
# COMMON-NEXT: {{^}}undefined{{$}}
|
||||
|
||||
# POSIX: defined T 0 0
|
||||
# POSIX-NEXT: undefined U 0 0
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_REL
|
||||
Sections:
|
||||
- Name: .text
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
|
||||
Symbols:
|
||||
- Name: defined
|
||||
Section: .text
|
||||
Binding: STB_GLOBAL
|
||||
- Name: undefined
|
||||
Binding: STB_GLOBAL
|
53
test/tools/llvm-nm/just-symbols.test
Normal file
53
test/tools/llvm-nm/just-symbols.test
Normal file
@ -0,0 +1,53 @@
|
||||
## Show that the -j/--just-symbol-name/--format=just-symbols prints only the the
|
||||
## symbol name.
|
||||
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
|
||||
# RUN: llvm-nm -j %t.o > %t.txt
|
||||
# RUN: llvm-nm --just-symbol-name %t.o | diff %t.txt -
|
||||
# RUN: llvm-nm --format=just-symbols %t.o | diff %t.txt -
|
||||
# RUN: llvm-nm --format=sysv -j %t.o | diff %t.txt -
|
||||
# RUN: llvm-nm -j --format=posix %t.o | diff %t.txt -
|
||||
|
||||
# RUN: FileCheck %s --input-file=%t.txt --implicit-check-not={{.}} --check-prefix=COMMON
|
||||
|
||||
# COMMON: {{^}}defined{{$}}
|
||||
# COMMON-NEXT: {{^}}undefined{{$}}
|
||||
|
||||
# RUN: llvm-nm -j %t.o %t.o | FileCheck %s --check-prefix=MULTI1 -DFILE=%t.o
|
||||
|
||||
# MULTI1-NOT: {{.}}
|
||||
# MULTI1: {{^$}}
|
||||
# MULTI1-NEXT: [[FILE]]:
|
||||
# MULTI1-NEXT: defined
|
||||
# MULTI1-NEXT: undefined
|
||||
# MULTI1-EMPTY:
|
||||
# MULTI1-NEXT: [[FILE]]:
|
||||
# MULTI1-NEXT: defined
|
||||
# MULTI1-NEXT: undefined
|
||||
# MULTI1-NOT: {{.}}
|
||||
|
||||
# RUN: llvm-nm -j --print-file-name %t.o %t.o | FileCheck %s --check-prefix=MULTI2 -DFILE=%t.o
|
||||
|
||||
# MULTI2-NOT: {{.}}
|
||||
# MULTI2: [[FILE]]: defined
|
||||
# MULTI2-NEXT: [[FILE]]: undefined
|
||||
# MULTI2-NEXT: [[FILE]]: defined
|
||||
# MULTI2-NEXT: [[FILE]]: undefined
|
||||
# MULTI2-NOT: {{.}}
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_REL
|
||||
Sections:
|
||||
- Name: .text
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
|
||||
Symbols:
|
||||
- Name: defined
|
||||
Section: .text
|
||||
Binding: STB_GLOBAL
|
||||
- Name: undefined
|
||||
Binding: STB_GLOBAL
|
@ -47,7 +47,7 @@ using namespace llvm;
|
||||
using namespace object;
|
||||
|
||||
namespace {
|
||||
enum OutputFormatTy { bsd, sysv, posix, darwin };
|
||||
enum OutputFormatTy { bsd, sysv, posix, darwin, just_symbols };
|
||||
|
||||
cl::OptionCategory NMCat("llvm-nm Options");
|
||||
|
||||
@ -55,7 +55,9 @@ cl::opt<OutputFormatTy> OutputFormat(
|
||||
"format", cl::desc("Specify output format"),
|
||||
cl::values(clEnumVal(bsd, "BSD format"), clEnumVal(sysv, "System V format"),
|
||||
clEnumVal(posix, "POSIX.2 format"),
|
||||
clEnumVal(darwin, "Darwin -m format")),
|
||||
clEnumVal(darwin, "Darwin -m format"),
|
||||
cl::OptionEnumValue{"just-symbols", int(just_symbols),
|
||||
"just symbol names"}),
|
||||
cl::init(bsd), cl::cat(NMCat));
|
||||
cl::alias OutputFormat2("f", cl::desc("Alias for --format"),
|
||||
cl::aliasopt(OutputFormat));
|
||||
@ -180,9 +182,9 @@ cl::alias RadixAlias("t", cl::desc("Alias for --radix"),
|
||||
cl::aliasopt(AddressRadix));
|
||||
|
||||
cl::opt<bool> JustSymbolName("just-symbol-name",
|
||||
cl::desc("Print just the symbol's name"),
|
||||
cl::desc("Alias for --format=just-symbols"),
|
||||
cl::cat(NMCat));
|
||||
cl::alias JustSymbolNames("j", cl::desc("Alias for --just-symbol-name"),
|
||||
cl::alias JustSymbolNames("j", cl::desc("Alias for --format-just-symbols"),
|
||||
cl::aliasopt(JustSymbolName), cl::Grouping);
|
||||
|
||||
cl::opt<bool>
|
||||
@ -772,10 +774,10 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
|
||||
}
|
||||
|
||||
if (!PrintFileName) {
|
||||
if (OutputFormat == posix && MultipleFiles && printName) {
|
||||
if ((OutputFormat == bsd || OutputFormat == posix ||
|
||||
OutputFormat == just_symbols) &&
|
||||
MultipleFiles && printName) {
|
||||
outs() << '\n' << CurrentFilename << ":\n";
|
||||
} else if (OutputFormat == bsd && MultipleFiles && printName) {
|
||||
outs() << "\n" << CurrentFilename << ":\n";
|
||||
} else if (OutputFormat == sysv) {
|
||||
outs() << "\n\nSymbols from " << CurrentFilename << ":\n\n";
|
||||
if (isSymbolList64Bit(Obj))
|
||||
@ -844,7 +846,7 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
|
||||
continue;
|
||||
if (PrintFileName)
|
||||
writeFileName(outs(), ArchiveName, ArchitectureName);
|
||||
if ((JustSymbolName ||
|
||||
if ((OutputFormat == just_symbols ||
|
||||
(UndefinedOnly && MachO && OutputFormat != darwin)) &&
|
||||
OutputFormat != posix) {
|
||||
outs() << Name << "\n";
|
||||
@ -2251,6 +2253,8 @@ int main(int argc, char **argv) {
|
||||
OutputFormat = posix;
|
||||
if (DarwinFormat)
|
||||
OutputFormat = darwin;
|
||||
if (JustSymbolName)
|
||||
OutputFormat = just_symbols;
|
||||
|
||||
// The relative order of these is important. If you pass --size-sort it should
|
||||
// only print out the size. However, if you pass -S --size-sort, it should
|
||||
|
Loading…
x
Reference in New Issue
Block a user