summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2022-03-25 14:33:38 -0700
committerKhem Raj <raj.khem@gmail.com>2023-09-08 09:08:54 -0700
commit756077c29caf19719f1bc8173700f98c32b5faf2 (patch)
treef9239e65e3be80628ed12cd65acec42408bdf2d9
parentdeceaf8321d53e6e7d76393e286cc09b770d8d14 (diff)
downloadmeta-clang-756077c29caf19719f1bc8173700f98c32b5faf2.tar.gz
clang: Add a patch to fix llvm-objdump
Signed-off-by: Khem Raj <raj.khem@gmail.com> (cherry picked from commit 42dd5484867b772767a33340ee219fb9f42799e4)
-rw-r--r--recipes-devtools/clang/clang/D122505.diff135
-rw-r--r--recipes-devtools/clang/common.inc1
2 files changed, 136 insertions, 0 deletions
diff --git a/recipes-devtools/clang/clang/D122505.diff b/recipes-devtools/clang/clang/D122505.diff
new file mode 100644
index 0000000..fa154d7
--- /dev/null
+++ b/recipes-devtools/clang/clang/D122505.diff
@@ -0,0 +1,135 @@
1Upstream-Status: https://reviews.llvm.org/D122505
2
3diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp
4--- a/llvm/lib/Object/ELF.cpp
5+++ b/llvm/lib/Object/ELF.cpp
6@@ -568,11 +568,9 @@
7 }
8
9 if (Dyn.empty())
10- // TODO: this error is untested.
11 return createError("invalid empty dynamic section");
12
13 if (Dyn.back().d_tag != ELF::DT_NULL)
14- // TODO: this error is untested.
15 return createError("dynamic sections must be DT_NULL terminated");
16
17 return Dyn;
18diff --git a/llvm/test/tools/llvm-objdump/ELF/dynamic-malformed.test b/llvm/test/tools/llvm-objdump/ELF/dynamic-malformed.test
19new file mode 100644
20--- /dev/null
21+++ b/llvm/test/tools/llvm-objdump/ELF/dynamic-malformed.test
22@@ -0,0 +1,39 @@
23+## An empty dynamic section is invalid. Test we report a warning instead of an
24+## error. objcopy --only-keep-debug may produce an empty dynamic section, it is
25+## excessive to use an error.
26+# RUN: yaml2obj %s --docnum=1 -o %t.empty
27+# RUN: llvm-objdump -p %t.empty 2>&1 | FileCheck %s -DFILE=%t.empty --check-prefix=EMPTY
28+
29+# EMPTY: Program Header:
30+# EMPTY-NEXT: warning: '[[FILE]]': invalid empty dynamic section
31+# EMPTY-EMPTY:
32+
33+--- !ELF
34+FileHeader:
35+ Class: ELFCLASS64
36+ Data: ELFDATA2LSB
37+ Type: ET_EXEC
38+ Machine: EM_X86_64
39+Sections:
40+ - Name: .dynamic
41+ Type: SHT_DYNAMIC
42+
43+# RUN: yaml2obj %s --docnum=2 -o %t.nonull
44+# RUN: llvm-objdump -p %t.nonull 2>&1 | FileCheck %s -DFILE=%t.nonull --check-prefix=NONULL
45+
46+# NONULL: Program Header:
47+# NONULL-NEXT: warning: '[[FILE]]': dynamic sections must be DT_NULL terminated
48+# NONULL-EMPTY:
49+
50+--- !ELF
51+FileHeader:
52+ Class: ELFCLASS64
53+ Data: ELFDATA2LSB
54+ Type: ET_EXEC
55+ Machine: EM_X86_64
56+Sections:
57+ - Name: .dynamic
58+ Type: SHT_DYNAMIC
59+ Entries:
60+ - Tag: DT_SONAME
61+ Value: 1
62diff --git a/llvm/test/tools/llvm-objdump/ELF/invalid-phdr.test b/llvm/test/tools/llvm-objdump/ELF/invalid-phdr.test
63--- a/llvm/test/tools/llvm-objdump/ELF/invalid-phdr.test
64+++ b/llvm/test/tools/llvm-objdump/ELF/invalid-phdr.test
65@@ -1,11 +1,11 @@
66 ## Test how we handle the case when the e_phoff field is invalid.
67 # RUN: yaml2obj %s -o %t
68-# RUN: not llvm-objdump --private-headers %t 2>&1 | \
69+# RUN: llvm-objdump --private-headers %t 2>&1 | \
70 # RUN: FileCheck -DFILE=%t %s --check-prefix=INVALID-PHOFF
71
72 # INVALID-PHOFF: Program Header:
73 # INVALID-PHOFF-NEXT: warning: '[[FILE]]': unable to read program headers: program headers are longer than binary of size 280: e_phoff = 0xffffff, e_phnum = 0, e_phentsize = 0
74-# INVALID-PHOFF-NEXT: error: '[[FILE]]': program headers are longer than binary of size 280: e_phoff = 0xffffff, e_phnum = 0, e_phentsize = 0
75+# INVALID-PHOFF-NEXT: warning: '[[FILE]]': program headers are longer than binary of size 280: e_phoff = 0xffffff, e_phnum = 0, e_phentsize = 0
76
77 --- !ELF
78 FileHeader:
79diff --git a/llvm/test/tools/llvm-objdump/ELF/program-headers.test b/llvm/test/tools/llvm-objdump/ELF/program-headers.test
80--- a/llvm/test/tools/llvm-objdump/ELF/program-headers.test
81+++ b/llvm/test/tools/llvm-objdump/ELF/program-headers.test
82@@ -278,12 +278,12 @@
83 ## Check we report an error / warning when we are unable to read program headers.
84 ## Case A: the e_phentsize field is invalid.
85 # RUN: yaml2obj --docnum=2 -DPHENTSIZE=1 %s -o %t.phdr.err
86-# RUN: not llvm-objdump --private-headers %t.phdr.err 2>&1 | \
87+# RUN: llvm-objdump --private-headers %t.phdr.err 2>&1 | \
88 # RUN: FileCheck %s -DFILE=%t.phdr.err --check-prefix=PHENTSIZE
89
90 # PHENTSIZE: Program Header:
91 # PHENTSIZE-NEXT: warning: '[[FILE]]': unable to read program headers: invalid e_phentsize: 1
92-# PHENTSIZE-NEXT: error: '[[FILE]]': invalid e_phentsize: 1
93+# PHENTSIZE-NEXT: warning: '[[FILE]]': invalid e_phentsize: 1
94
95 --- !ELF
96 FileHeader:
97@@ -309,16 +309,16 @@
98
99 ## Check we report a warning / error when e_phoff goes 1 byte past the end of the file.
100 # RUN: yaml2obj --docnum=2 -DPHOFF=0x161 %s -o %t.phdr.err2
101-# RUN: not llvm-objdump --private-headers %t.phdr.err2 2>&1 | \
102+# RUN: llvm-objdump --private-headers %t.phdr.err2 2>&1 | \
103 # RUN: FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=PHOFF -DOFF=0x161
104
105 # PHOFF: Program Header:
106 # PHOFF-NEXT: warning: '[[FILE]]': unable to read program headers: program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56
107-# PHOFF-NEXT: error: '[[FILE]]': program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56
108+# PHOFF-NEXT: warning: '[[FILE]]': program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56
109
110
111 ## Check we report a warning / error when the value of e_phoff is so large that
112 ## e_phoff + e_phnum * e_phentsize > UINT64_MAX.
113 # RUN: yaml2obj --docnum=2 -DPHOFF=0xffffffffffffffff %s -o %t.phdr.err3
114-# RUN: not llvm-objdump --private-headers %t.phdr.err3 2>&1 | \
115+# RUN: llvm-objdump --private-headers %t.phdr.err3 2>&1 | \
116 # RUN: FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=PHOFF -DOFF=0xffffffffffffffff
117diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp
118--- a/llvm/tools/llvm-objdump/ELFDump.cpp
119+++ b/llvm/tools/llvm-objdump/ELFDump.cpp
120@@ -171,8 +171,12 @@
121
122 template <class ELFT>
123 static void printDynamicSection(const ELFFile<ELFT> &Elf, StringRef Filename) {
124- ArrayRef<typename ELFT::Dyn> DynamicEntries =
125- unwrapOrError(Elf.dynamicEntries(), Filename);
126+ auto DynamicEntriesOrErr = Elf.dynamicEntries();
127+ if (!DynamicEntriesOrErr) {
128+ reportWarning(toString(DynamicEntriesOrErr.takeError()), Filename);
129+ return;
130+ }
131+ ArrayRef<typename ELFT::Dyn> DynamicEntries = *DynamicEntriesOrErr;
132
133 // Find the maximum tag name length to format the value column properly.
134 size_t MaxLen = 0;
135
diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc
index b61d239..ba47dd1 100644
--- a/recipes-devtools/clang/common.inc
+++ b/recipes-devtools/clang/common.inc
@@ -45,6 +45,7 @@ SRC_URI = "\
45 file://0033-lldb-Link-with-libatomic-on-x86.patch \ 45 file://0033-lldb-Link-with-libatomic-on-x86.patch \
46 file://0034-clang-exclude-openembedded-distributions-from-settin.patch \ 46 file://0034-clang-exclude-openembedded-distributions-from-settin.patch \
47 file://0035-compiler-rt-Enable-__int128-for-ppc32.patch \ 47 file://0035-compiler-rt-Enable-__int128-for-ppc32.patch \
48 file://D122505.diff \
48 " 49 "
49# Fallback to no-PIE if not set 50# Fallback to no-PIE if not set
50GCCPIE ??= "" 51GCCPIE ??= ""