mirror of
https://src.fedoraproject.org/rpms/llvm.git
synced 2024-12-01 03:32:55 +00:00
BPF unknown opcode fix: rhbz#1618958
This commit is contained in:
parent
9b2b71b935
commit
4dd9a4253d
2 changed files with 87 additions and 1 deletions
82
0001-Merging-r340455.patch
Normal file
82
0001-Merging-r340455.patch
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
From 34940cd4ee42f59e0035e2778b307c8dc4e1b5ac Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans Wennborg <hans@hanshq.net>
|
||||||
|
Date: Thu, 30 Aug 2018 08:42:29 +0000
|
||||||
|
Subject: [PATCH] Merging r340455:
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
r340455 | yhs | 2018-08-22 23:21:03 +0200 (Wed, 22 Aug 2018) | 38 lines
|
||||||
|
|
||||||
|
bpf: fix an assertion in BPFAsmBackend applyFixup()
|
||||||
|
|
||||||
|
Fix bug https://bugs.llvm.org/show_bug.cgi?id=38643
|
||||||
|
|
||||||
|
In BPFAsmBackend applyFixup(), there is an assertion for FixedValue to be 0.
|
||||||
|
This may not be true, esp. for optimiation level 0.
|
||||||
|
For example, in the above bug, for the following two
|
||||||
|
static variables:
|
||||||
|
@bpf_map_lookup_elem = internal global i8* (i8*, i8*)*
|
||||||
|
inttoptr (i64 1 to i8* (i8*, i8*)*), align 8
|
||||||
|
@bpf_map_update_elem = internal global i32 (i8*, i8*, i8*, i64)*
|
||||||
|
inttoptr (i64 2 to i32 (i8*, i8*, i8*, i64)*), align 8
|
||||||
|
|
||||||
|
The static variable @bpf_map_update_elem will have a symbol
|
||||||
|
offset of 8 and a FK_SecRel_8 with FixupValue 8 will cause
|
||||||
|
the assertion if llvm is built with -DLLVM_ENABLE_ASSERTIONS=ON.
|
||||||
|
|
||||||
|
The above relocations will not exist if the program is compiled
|
||||||
|
with optimization level -O1 and above as the compiler optimizes
|
||||||
|
those static variables away. In the below error message, -O2
|
||||||
|
is suggested as this is the common practice.
|
||||||
|
|
||||||
|
Note that FixedValue = 0 in applyFixup() does exist and is valid,
|
||||||
|
e.g., for the global variable my_map in the above bug. The bpf
|
||||||
|
loader will process them properly for map_id's before loading
|
||||||
|
the program into the kernel.
|
||||||
|
|
||||||
|
The static variables, which are not optimized away by compiler,
|
||||||
|
may have FK_SecRel_8 relocation with non-zero FixedValue.
|
||||||
|
|
||||||
|
The patch removed the offending assertion and will issue
|
||||||
|
a hard error as below if the FixedValue in applyFixup()
|
||||||
|
is not 0.
|
||||||
|
$ llc -march=bpf -filetype=obj fixup.ll
|
||||||
|
LLVM ERROR: Unsupported relocation: try to compile with -O2 or above,
|
||||||
|
or check your static variable usage
|
||||||
|
|
||||||
|
Signed-off-by: Yonghong Song <yhs@fb.com>
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_70@341038 91177308-0d34-0410-b5e6-96231b3b80d8
|
||||||
|
---
|
||||||
|
lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp | 9 ++++++++-
|
||||||
|
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp b/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
|
||||||
|
index 6593d9d..4566cbc 100644
|
||||||
|
--- a/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
|
||||||
|
+++ b/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
|
||||||
|
@@ -10,6 +10,8 @@
|
||||||
|
#include "MCTargetDesc/BPFMCTargetDesc.h"
|
||||||
|
#include "llvm/ADT/StringRef.h"
|
||||||
|
#include "llvm/MC/MCAsmBackend.h"
|
||||||
|
+#include "llvm/MC/MCAssembler.h"
|
||||||
|
+#include "llvm/MC/MCContext.h"
|
||||||
|
#include "llvm/MC/MCFixup.h"
|
||||||
|
#include "llvm/MC/MCObjectWriter.h"
|
||||||
|
#include <cassert>
|
||||||
|
@@ -68,7 +70,12 @@ void BPFAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
|
||||||
|
MutableArrayRef<char> Data, uint64_t Value,
|
||||||
|
bool IsResolved) const {
|
||||||
|
if (Fixup.getKind() == FK_SecRel_4 || Fixup.getKind() == FK_SecRel_8) {
|
||||||
|
- assert(Value == 0);
|
||||||
|
+ if (Value) {
|
||||||
|
+ MCContext &Ctx = Asm.getContext();
|
||||||
|
+ Ctx.reportError(Fixup.getLoc(),
|
||||||
|
+ "Unsupported relocation: try to compile with -O2 or above, "
|
||||||
|
+ "or check your static variable usage");
|
||||||
|
+ }
|
||||||
|
} else if (Fixup.getKind() == FK_Data_4 || Fixup.getKind() == FK_Data_8) {
|
||||||
|
unsigned Size = Fixup.getKind() == FK_Data_4 ? 4 : 8;
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
Name: %{pkg_name}
|
Name: %{pkg_name}
|
||||||
Version: %{maj_ver}.%{min_ver}.%{patch_ver}
|
Version: %{maj_ver}.%{min_ver}.%{patch_ver}
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
Summary: The Low Level Virtual Machine
|
Summary: The Low Level Virtual Machine
|
||||||
|
|
||||||
License: NCSA
|
License: NCSA
|
||||||
|
@ -47,6 +47,7 @@ Patch9: 0001-Export-LLVM_DYLIB_COMPONENTS-in-LLVMConfig.cmake.patch
|
||||||
Patch10: 0001-Don-t-run-BV-DAG-Combine-before-legalization-if-it-a.patch
|
Patch10: 0001-Don-t-run-BV-DAG-Combine-before-legalization-if-it-a.patch
|
||||||
Patch11: 0001-PowerPC-Do-not-round-values-prior-to-converting-to-i.patch
|
Patch11: 0001-PowerPC-Do-not-round-values-prior-to-converting-to-i.patch
|
||||||
Patch12: 0001-SystemZ-TableGen-Fix-shift-count-handling.patch
|
Patch12: 0001-SystemZ-TableGen-Fix-shift-count-handling.patch
|
||||||
|
Patch13: 0001-Merging-r340455.patch
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
|
@ -315,6 +316,9 @@ fi
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Sep 26 2018 Tom Stellard <tstellar@redhat.com> - 6.0.1-8
|
||||||
|
- BPF unknown opcode fix: rhbz#1618958
|
||||||
|
|
||||||
* Wed Aug 29 2018 Tom Stellard <tstellar@redhat.com> - 6.0.1-7
|
* Wed Aug 29 2018 Tom Stellard <tstellar@redhat.com> - 6.0.1-7
|
||||||
- Build the gold plugin on all supported architectures
|
- Build the gold plugin on all supported architectures
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue