1 |
commit: a7dd8be8771e2c87149d061152541aa4bdf917d7 |
2 |
Author: Craig Andrews <candrews <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Sep 27 18:04:37 2019 +0000 |
4 |
Commit: Craig Andrews <candrews <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Sep 27 18:05:00 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a7dd8be8 |
7 |
|
8 |
dev-libs/rocm-comgr: fix llvm related build error |
9 |
|
10 |
Closes: https://bugs.gentoo.org/695660 |
11 |
Package-Manager: Portage-2.3.76, Repoman-2.3.17 |
12 |
Signed-off-by: Craig Andrews <candrews <AT> gentoo.org> |
13 |
|
14 |
.../rocm-comgr-2.7.0-llvm-interface-change.patch | 176 +++++++++++++++++++++ |
15 |
dev-libs/rocm-comgr/rocm-comgr-2.7.0.ebuild | 1 + |
16 |
2 files changed, 177 insertions(+) |
17 |
|
18 |
diff --git a/dev-libs/rocm-comgr/files/rocm-comgr-2.7.0-llvm-interface-change.patch b/dev-libs/rocm-comgr/files/rocm-comgr-2.7.0-llvm-interface-change.patch |
19 |
new file mode 100644 |
20 |
index 00000000000..dc8ed42fc46 |
21 |
--- /dev/null |
22 |
+++ b/dev-libs/rocm-comgr/files/rocm-comgr-2.7.0-llvm-interface-change.patch |
23 |
@@ -0,0 +1,176 @@ |
24 |
+From a73e4ce7c686787840454e206a17973685b03e62 Mon Sep 17 00:00:00 2001 |
25 |
+From: Michael LIAO <michaelhongbin.liao@×××.com> |
26 |
+Date: Thu, 15 Aug 2019 13:25:58 -0400 |
27 |
+Subject: [PATCH] Fix comgr build due to LLVM interface change. |
28 |
+ |
29 |
+Change-Id: I66c2203f09b683dd06807860eeb5f517cd200f0e |
30 |
+--- |
31 |
+ src/comgr-objdump.cpp | 68 +++++++++++++++++++++++---------- |
32 |
+ 1 file changed, 47 insertions(+), 21 deletions(-) |
33 |
+ |
34 |
+diff --git a/src/comgr-objdump.cpp b/src/comgr-objdump.cpp |
35 |
+index bf490b6..59a9d05 100644 |
36 |
+--- a/src/comgr-objdump.cpp |
37 |
++++ b/src/comgr-objdump.cpp |
38 |
+@@ -307,15 +307,18 @@ class SectionFilter { |
39 |
+ FilterPredicate Predicate; |
40 |
+ llvm::object::ObjectFile const &Object; |
41 |
+ }; |
42 |
++ |
43 |
+ SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O) { |
44 |
+ return SectionFilter( |
45 |
+ [](llvm::object::SectionRef const &S) { |
46 |
+ if (FilterSections.empty()) |
47 |
+ return true; |
48 |
+- llvm::StringRef String; |
49 |
+- std::error_code error = S.getName(String); |
50 |
+- if (error) |
51 |
++ Expected<StringRef> SecNameOrErr = S.getName(); |
52 |
++ if (!SecNameOrErr) { |
53 |
++ consumeError(SecNameOrErr.takeError()); |
54 |
+ return false; |
55 |
++ } |
56 |
++ StringRef String = *SecNameOrErr; |
57 |
+ return is_contained(FilterSections, String); |
58 |
+ }, |
59 |
+ O); |
60 |
+@@ -394,6 +397,18 @@ report_error(StringRef ArchiveName, const object::Archive::Child &C, |
61 |
+ report_error(ArchiveName, NameOrErr.get(), std::move(E), ArchitectureName); |
62 |
+ } |
63 |
+ |
64 |
++static LLVM_ATTRIBUTE_NORETURN void report_error(llvm::Error E, |
65 |
++ StringRef File) { |
66 |
++ report_error(File, std::move(E)); |
67 |
++} |
68 |
++ |
69 |
++template <typename T, typename... Ts> |
70 |
++T unwrapOrError(Expected<T> EO, Ts &&... Args) { |
71 |
++ if (EO) |
72 |
++ return std::move(*EO); |
73 |
++ report_error(EO.takeError(), std::forward<Ts>(Args)...); |
74 |
++} |
75 |
++ |
76 |
+ static const Target *getTarget(const ObjectFile *Obj = nullptr) { |
77 |
+ // Figure out the target triple. |
78 |
+ llvm::Triple TheTriple("unknown-unknown-unknown"); |
79 |
+@@ -822,13 +837,13 @@ static void printRelocationTargetName(const MachOObjectFile *O, |
80 |
+ for (const SectionRef &Section : ToolSectionFilter(*O)) { |
81 |
+ std::error_code ec; |
82 |
+ |
83 |
+- StringRef Name; |
84 |
+ uint64_t Addr = Section.getAddress(); |
85 |
+ if (Addr != Val) |
86 |
+ continue; |
87 |
+- if ((ec = Section.getName(Name))) |
88 |
+- report_error(O->getFileName(), ec); |
89 |
+- fmt << Name; |
90 |
++ Expected<StringRef> NameOrErr = Section.getName(); |
91 |
++ if (!NameOrErr) |
92 |
++ report_error(O->getFileName(), NameOrErr.takeError()); |
93 |
++ fmt << *NameOrErr; |
94 |
+ return; |
95 |
+ } |
96 |
+ |
97 |
+@@ -854,7 +869,11 @@ static void printRelocationTargetName(const MachOObjectFile *O, |
98 |
+ section_iterator SI = O->section_begin(); |
99 |
+ // Adjust for the fact that sections are 1-indexed. |
100 |
+ advance(SI, Val - 1); |
101 |
+- SI->getName(S); |
102 |
++ Expected<StringRef> SOrErr = SI->getName(); |
103 |
++ if (!SOrErr) |
104 |
++ consumeError(SOrErr.takeError()); |
105 |
++ else |
106 |
++ S = *SOrErr; |
107 |
+ } |
108 |
+ |
109 |
+ fmt << S; |
110 |
+@@ -1362,8 +1381,7 @@ void llvm::DisassemHelper::DisassembleObject(const ObjectFile *Obj, |
111 |
+ DataRefImpl DR = Section.getRawDataRefImpl(); |
112 |
+ SegmentName = MachO->getSectionFinalSegmentName(DR); |
113 |
+ } |
114 |
+- StringRef name; |
115 |
+- error(Section.getName(name)); |
116 |
++ StringRef name = unwrapOrError(Section.getName(), Obj->getFileName()); |
117 |
+ |
118 |
+ if ((SectionAddr <= StopAddress) && |
119 |
+ (SectionAddr + SectSize) >= StartAddress) { |
120 |
+@@ -1675,8 +1693,7 @@ void llvm::DisassemHelper::PrintRelocations(const ObjectFile *Obj) { |
121 |
+ for (const SectionRef &Section : ToolSectionFilter(*Obj)) { |
122 |
+ if (Section.relocation_begin() == Section.relocation_end()) |
123 |
+ continue; |
124 |
+- StringRef secname; |
125 |
+- error(Section.getName(secname)); |
126 |
++ StringRef secname = unwrapOrError(Section.getName(), Obj->getFileName()); |
127 |
+ OutS << "RELOCATION RECORDS FOR [" << secname << "]:\n"; |
128 |
+ for (const RelocationRef &Reloc : Section.relocations()) { |
129 |
+ bool hidden = getHidden(Reloc); |
130 |
+@@ -1699,8 +1716,7 @@ void llvm::DisassemHelper::PrintSectionHeaders(const ObjectFile *Obj) { |
131 |
+ "Idx Name Size Address Type\n"; |
132 |
+ unsigned i = 0; |
133 |
+ for (const SectionRef &Section : ToolSectionFilter(*Obj)) { |
134 |
+- StringRef Name; |
135 |
+- error(Section.getName(Name)); |
136 |
++ StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName()); |
137 |
+ uint64_t Address = Section.getAddress(); |
138 |
+ uint64_t Size = Section.getSize(); |
139 |
+ bool Text = Section.isText(); |
140 |
+@@ -1717,9 +1733,8 @@ void llvm::DisassemHelper::PrintSectionHeaders(const ObjectFile *Obj) { |
141 |
+ void llvm::DisassemHelper::PrintSectionContents(const ObjectFile *Obj) { |
142 |
+ std::error_code EC; |
143 |
+ for (const SectionRef &Section : ToolSectionFilter(*Obj)) { |
144 |
+- StringRef Name; |
145 |
+ StringRef Contents; |
146 |
+- error(Section.getName(Name)); |
147 |
++ StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName()); |
148 |
+ uint64_t BaseAddr = Section.getAddress(); |
149 |
+ uint64_t Size = Section.getSize(); |
150 |
+ if (!Size) |
151 |
+@@ -1797,7 +1812,11 @@ void llvm::DisassemHelper::PrintSymbolTable(const ObjectFile *o, |
152 |
+ section_iterator Section = *SectionOrErr; |
153 |
+ StringRef Name; |
154 |
+ if (Type == SymbolRef::ST_Debug && Section != o->section_end()) { |
155 |
+- Section->getName(Name); |
156 |
++ Expected<StringRef> NameOrErr = Section->getName(); |
157 |
++ if (!NameOrErr) |
158 |
++ consumeError(NameOrErr.takeError()); |
159 |
++ else |
160 |
++ Name = *NameOrErr; |
161 |
+ } else { |
162 |
+ Expected<StringRef> NameOrErr = Symbol.getName(); |
163 |
+ if (!NameOrErr) |
164 |
+@@ -1846,8 +1865,7 @@ void llvm::DisassemHelper::PrintSymbolTable(const ObjectFile *o, |
165 |
+ StringRef SegmentName = MachO->getSectionFinalSegmentName(DR); |
166 |
+ OutS << SegmentName << ","; |
167 |
+ } |
168 |
+- StringRef SectionName; |
169 |
+- error(Section->getName(SectionName)); |
170 |
++ StringRef SectionName = unwrapOrError(Section->getName(), o->getFileName()); |
171 |
+ OutS << SectionName; |
172 |
+ } |
173 |
+ |
174 |
+@@ -1978,7 +1996,11 @@ void llvm::DisassemHelper::printRawClangAST(const ObjectFile *Obj) { |
175 |
+ Optional<object::SectionRef> ClangASTSection; |
176 |
+ for (auto Sec : ToolSectionFilter(*Obj)) { |
177 |
+ StringRef Name; |
178 |
+- Sec.getName(Name); |
179 |
++ auto NameOrErr = Sec.getName(); |
180 |
++ if (!NameOrErr) // FIXME: Need better error handling. |
181 |
++ consumeError(NameOrErr.takeError()); |
182 |
++ else |
183 |
++ Name = *NameOrErr; |
184 |
+ if (Name == ClangASTSectionName) { |
185 |
+ ClangASTSection = Sec; |
186 |
+ break; |
187 |
+@@ -2015,7 +2037,11 @@ void llvm::DisassemHelper::printFaultMaps(const ObjectFile *Obj) { |
188 |
+ |
189 |
+ for (auto Sec : ToolSectionFilter(*Obj)) { |
190 |
+ StringRef Name; |
191 |
+- Sec.getName(Name); |
192 |
++ auto NameOrErr = Sec.getName(); |
193 |
++ if (!NameOrErr) // FIXME: Need better error handling. |
194 |
++ consumeError(NameOrErr.takeError()); |
195 |
++ else |
196 |
++ Name = *NameOrErr; |
197 |
+ if (Name == FaultMapSectionName) { |
198 |
+ FaultMapSection = Sec; |
199 |
+ break; |
200 |
|
201 |
diff --git a/dev-libs/rocm-comgr/rocm-comgr-2.7.0.ebuild b/dev-libs/rocm-comgr/rocm-comgr-2.7.0.ebuild |
202 |
index 17cde649143..e357310f253 100644 |
203 |
--- a/dev-libs/rocm-comgr/rocm-comgr-2.7.0.ebuild |
204 |
+++ b/dev-libs/rocm-comgr/rocm-comgr-2.7.0.ebuild |
205 |
@@ -20,6 +20,7 @@ PATCHES=( |
206 |
"${FILESDIR}/${PN}-2.6.0-find-lld-includes.patch" |
207 |
"${FILESDIR}/${PN}-2.6.0-dependencies.patch" |
208 |
"${FILESDIR}/${PN}-2.6.0-unbundle-yaml-cpp.patch" |
209 |
+ "${FILESDIR}/${PN}-2.7.0-llvm-interface-change.patch" |
210 |
) |
211 |
|
212 |
DESCRIPTION="Radeon Open Compute Code Object Manager" |