[PATCH] D133448: Make llvm-tli-checker support static libraries
Paul Robinson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 8 11:10:46 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
probinson marked 2 inline comments as done.
Closed by commit rGf92c1726deb7: Make llvm-tli-checker support static libraries (authored by probinson).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D133448/new/
https://reviews.llvm.org/D133448
Files:
llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
Index: llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
===================================================================
--- llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
+++ llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
@@ -155,6 +155,7 @@
// Store all the exported symbol names we found in the input libraries.
// We use a map to get hashed lookup speed; the bool is meaningless.
class SDKNameMap : public StringMap<bool> {
+ void maybeInsertSymbol(const SymbolRef &S, const ObjectFile &O);
void populateFromObject(ObjectFile *O);
void populateFromArchive(Archive *A);
@@ -163,6 +164,19 @@
};
static SDKNameMap SDKNames;
+// Insert defined global function symbols into the map if valid.
+void SDKNameMap::maybeInsertSymbol(const SymbolRef &S, const ObjectFile &O) {
+ SymbolRef::Type Type = unwrapIgnoreError(S.getType());
+ uint32_t Flags = unwrapIgnoreError(S.getFlags());
+ section_iterator Section = unwrapIgnoreError(S.getSection(),
+ /*Default=*/O.section_end());
+ if (Type == SymbolRef::ST_Function && (Flags & SymbolRef::SF_Global) &&
+ Section != O.section_end()) {
+ StringRef Name = unwrapIgnoreError(S.getName());
+ insert({ Name, true });
+ }
+}
+
// Given an ObjectFile, extract the global function symbols.
void SDKNameMap::populateFromObject(ObjectFile *O) {
// FIXME: Support other formats.
@@ -173,16 +187,12 @@
}
const auto *ELF = cast<ELFObjectFileBase>(O);
- for (const auto &S : ELF->getDynamicSymbolIterators()) {
- // We want only defined global function symbols.
- SymbolRef::Type Type = unwrapIgnoreError(S.getType());
- uint32_t Flags = unwrapIgnoreError(S.getFlags());
- section_iterator Section = unwrapIgnoreError(S.getSection(),
- /*Default=*/O->section_end());
- StringRef Name = unwrapIgnoreError(S.getName());
- if (Type == SymbolRef::ST_Function && (Flags & SymbolRef::SF_Global) &&
- Section != O->section_end())
- insert({Name, true});
+ if (ELF->getEType() == ELF::ET_REL) {
+ for (const auto &S : ELF->symbols())
+ maybeInsertSymbol(S, *O);
+ } else {
+ for (const auto &S : ELF->getDynamicSymbolIterators())
+ maybeInsertSymbol(S, *O);
}
}
Index: llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
===================================================================
--- llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
+++ llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
@@ -1,12 +1,12 @@
# REQUIRES: x86-registered-target
#
-## This produces the object that matches expectations for PS4/PS5.
-# RUN: yaml2obj %s -DZDAPV=_ZdaPv -o=%t1
+## This produces a static object that matches expectations for PS4/PS5.
+# RUN: yaml2obj %s -DTYPE=ET_REL -DLABEL=Symbols -DZDAPV=_ZdaPv -o=%t1
# RUN: llvm-tli-checker --triple=x86_64-scei-ps4 %t1 | FileCheck %s
# RUN: llvm-tli-checker --triple=x86_64-sie-ps5 %t1 | FileCheck %s
#
-## This produces an object that has _ZdaPvj instead of _ZdaPv.
-# RUN: yaml2obj %s -DZDAPV=_ZdaPvj -o=%t2
+## This produces a dynamic object that has _ZdaPvj instead of _ZdaPv.
+# RUN: yaml2obj %s -DTYPE=ET_DYN -DLABEL=DynamicSymbols -DZDAPV=_ZdaPvj -o=%t2
# RUN: llvm-tli-checker --triple x86_64-scei-ps4 %t2 | \
# RUN: FileCheck %s --check-prefixes=WRONG_SUMMARY,WRONG_DETAIL \
# RUN: --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133448.458804.patch
Type: text/x-patch
Size: 3452 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220908/86bb3e29/attachment.bin>
More information about the llvm-commits
mailing list