[llvm] [DirectX] Add ObjectFile boilerplate for objdump (PR #151434)
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 31 11:20:14 PDT 2025
================
@@ -515,3 +516,157 @@ uint8_t DirectX::PSVRuntimeInfo::getSigPatchOrPrimCount() const {
return P->SigPatchOrPrimElements;
return 0;
}
+
+class DXNotSupportedError : public ErrorInfo<DXNotSupportedError> {
+public:
+ static char ID;
+
+ DXNotSupportedError(StringRef S) : FeatureString(S) {}
+
+ void log(raw_ostream &OS) const override {
+ OS << "DXContainer does not support " << FeatureString;
+ }
+
+ std::error_code convertToErrorCode() const override {
+ return inconvertibleErrorCode();
+ }
+
+private:
+ StringRef FeatureString;
+};
+
+char DXNotSupportedError::ID = 0;
+
+Expected<section_iterator>
+DXContainerObjectFile::getSymbolSection(DataRefImpl Symb) const {
+ return make_error<DXNotSupportedError>("Symbol sections");
+}
+
+Expected<uint64_t>
+DXContainerObjectFile::getSymbolAddress(DataRefImpl Symb) const {
+ return make_error<DXNotSupportedError>("Symbol addresses");
+}
+
+void DXContainerObjectFile::moveSectionNext(DataRefImpl &Sec) const {
+ PartIterator It = reinterpret_cast<PartIterator>(Sec.p);
+ if (It == Parts.end())
+ return;
+
+ ++It;
+ Sec.p = reinterpret_cast<uintptr_t>(It);
+}
+
+Expected<StringRef>
+DXContainerObjectFile::getSectionName(DataRefImpl Sec) const {
+ PartIterator It = reinterpret_cast<PartIterator>(Sec.p);
+ return StringRef(It->Part.getName());
+}
+
+uint64_t DXContainerObjectFile::getSectionAddress(DataRefImpl Sec) const {
+ PartIterator It = reinterpret_cast<PartIterator>(Sec.p);
+ return It->Offset;
+}
+
+uint64_t DXContainerObjectFile::getSectionIndex(DataRefImpl Sec) const {
+ return (Sec.p - reinterpret_cast<uintptr_t>(Parts.begin())) /
+ sizeof(PartIterator);
+}
+
+uint64_t DXContainerObjectFile::getSectionSize(DataRefImpl Sec) const {
+ PartIterator It = reinterpret_cast<PartIterator>(Sec.p);
+ return It->Data.size();
+}
+Expected<ArrayRef<uint8_t>>
+DXContainerObjectFile::getSectionContents(DataRefImpl Sec) const {
+ PartIterator It = reinterpret_cast<PartIterator>(Sec.p);
+ return ArrayRef<uint8_t>(It->Data.bytes_begin(), It->Data.size());
+}
+
+uint64_t DXContainerObjectFile::getSectionAlignment(DataRefImpl Sec) const {
+ return 1;
+}
+
+bool DXContainerObjectFile::isSectionCompressed(DataRefImpl Sec) const {
+ return false;
+}
+
+bool DXContainerObjectFile::isSectionText(DataRefImpl Sec) const {
+ return false;
+}
+
+bool DXContainerObjectFile::isSectionData(DataRefImpl Sec) const {
+ return false;
+}
----------------
bogner wrote:
I don't actually see where these APIs are used, but arguably the DXIL section could be text and the other sections data I think.
https://github.com/llvm/llvm-project/pull/151434
More information about the llvm-commits
mailing list