diff options
author | Martin Storsjo <martin@martin.st> | 2017-11-03 07:18:14 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2017-11-03 07:18:14 +0000 |
commit | 1401524e20ddc7ec5839d86a87a10ee32b67dae1 (patch) | |
tree | 3cd03e2506930d32ceb6ca02f947b6a05f5bcf56 | |
parent | 333897ec31d752a4cf4d27c71b9a37d1cfd7dfad (diff) | |
download | bcm5719-llvm-1401524e20ddc7ec5839d86a87a10ee32b67dae1.tar.gz bcm5719-llvm-1401524e20ddc7ec5839d86a87a10ee32b67dae1.zip |
[llvm-nm] Print 'I' for import table data in COFF
The character gets uppercased into 'I' when it's a global symbol.
In GNU binutils, nm prints 'I' for symbols classified by
bfd_is_ind_section - which probably isn't exactly/only import
tables.
When building for win32, (some incarnations of?) libtool has got
rules that try to inspect linked libraries, and in order to
be sure that it is linking to a DLL import library as opposed to
a static library, it expects to find the string " I " in the output
of $NM when run on such an import library.
GNU binutils nm also flags all of the .idata$X chunks as 'i' (while
this patch only makes it set on .idata$2 and .idata$6) and also
flags __imp__function as 'I'.
Differential Revision: https://reviews.llvm.org/D39540
llvm-svn: 317300
-rw-r--r-- | llvm/test/tools/llvm-nm/X86/importlibrary.test | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-nm/X86/importlibrary.test b/llvm/test/tools/llvm-nm/X86/importlibrary.test index 9111694c2c6..107628d09ef 100644 --- a/llvm/test/tools/llvm-nm/X86/importlibrary.test +++ b/llvm/test/tools/llvm-nm/X86/importlibrary.test @@ -1,5 +1,7 @@ # RUN: llvm-nm -B %S/Inputs/example.lib | FileCheck --match-full-lines %s +CHECK: 00000000 I __IMPORT_DESCRIPTOR_example +CHECK: 00000000 I __NULL_IMPORT_DESCRIPTOR CHECK: 00000000 R __imp__constant CHECK: 00000000 R _constant CHECK: 00000000 D __imp__data diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 4ad0d95d67f..1b093f501d5 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -946,6 +946,10 @@ static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) { section_iterator SecI = *SecIOrErr; const coff_section *Section = Obj.getCOFFSection(*SecI); Characteristics = Section->Characteristics; + StringRef SectionName; + Obj.getSectionName(Section, SectionName); + if (SectionName.startswith(".idata")) + return 'i'; } switch (Symb.getSectionNumber()) { |