diff options
author | Jacek Caban <jacek@codeweavers.com> | 2024-02-06 13:47:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-06 13:47:58 +0100 |
commit | a2e5287d5a499521aaf093f812cbedcbbc2a4bc8 (patch) | |
tree | c0b05201b3fba9c108e0865c55525c27f380b410 /llvm/lib/Object/COFFImportFile.cpp | |
parent | 2e3de997ab7cd8728c484bc39e24fecbb97dfae8 (diff) | |
download | llvm-a2e5287d5a499521aaf093f812cbedcbbc2a4bc8.zip llvm-a2e5287d5a499521aaf093f812cbedcbbc2a4bc8.tar.gz llvm-a2e5287d5a499521aaf093f812cbedcbbc2a4bc8.tar.bz2 |
[llvm-readobj][Object][COFF] Print COFF import library symbol export name. (#78769)
getExportName implementation is based on lld-link. In its current form,
it's mostly about convenience, but it will be more useful for EXPORTAS
support, for which export name is not possible to deduce from other
printed properties.
Diffstat (limited to 'llvm/lib/Object/COFFImportFile.cpp')
-rw-r--r-- | llvm/lib/Object/COFFImportFile.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFImportFile.cpp b/llvm/lib/Object/COFFImportFile.cpp index 60556c1..d7d26f4 100644 --- a/llvm/lib/Object/COFFImportFile.cpp +++ b/llvm/lib/Object/COFFImportFile.cpp @@ -52,6 +52,32 @@ StringRef COFFImportFile::getFileFormatName() const { } } +StringRef COFFImportFile::getExportName() const { + const coff_import_header *hdr = getCOFFImportHeader(); + StringRef name = Data.getBuffer().substr(sizeof(*hdr)).split('\0').first; + + auto ltrim1 = [](StringRef s, StringRef chars) { + return !s.empty() && chars.contains(s[0]) ? s.substr(1) : s; + }; + + switch (hdr->getNameType()) { + case IMPORT_ORDINAL: + name = ""; + break; + case IMPORT_NAME_NOPREFIX: + name = ltrim1(name, "?@_"); + break; + case IMPORT_NAME_UNDECORATE: + name = ltrim1(name, "?@_"); + name = name.substr(0, name.find('@')); + break; + default: + break; + } + + return name; +} + static uint16_t getImgRelRelocation(MachineTypes Machine) { switch (Machine) { default: |