[llvm] r340455 - bpf: fix an assertion in BPFAsmBackend applyFixup()
Tom Stellard via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 28 11:08:20 PDT 2018
On 08/22/2018 02:21 PM, Yonghong Song via llvm-commits wrote:
> Author: yhs
> Date: Wed Aug 22 14:21:03 2018
> New Revision: 340455
>
> URL: http://llvm.org/viewvc/llvm-project?rev=340455&view=rev
> Log:
> bpf: fix an assertion in BPFAsmBackend applyFixup()
>
> Fix bug https://bugs.llvm.org/show_bug.cgi?id=38643
>
Hi Hans,
Would we be able to merge this to the release_70 branch?
-Tom
> 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 at fb.com>
>
> Modified:
> llvm/trunk/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
>
> Modified: llvm/trunk/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp?rev=340455&r1=340454&r2=340455&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp (original)
> +++ llvm/trunk/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp Wed Aug 22 14:21:03 2018
> @@ -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 "llvm/Support/EndianStream.h"
> @@ -71,7 +73,12 @@ void BPFAsmBackend::applyFixup(const MCA
> bool IsResolved,
> const MCSubtargetInfo *STI) 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) {
> support::endian::write<uint32_t>(&Data[Fixup.getOffset()], Value, Endian);
> } else if (Fixup.getKind() == FK_Data_8) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list