[llvm] Reject invalid BF encoding when target is next instruction (PR #201533)
Hamza Khan via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 4 07:53:07 PDT 2026
https://github.com/HamzaKodez updated https://github.com/llvm/llvm-project/pull/201533
>From 6f73f81bc8cc97a804bb9abc8bbbc3c39b375348 Mon Sep 17 00:00:00 2001
From: Hamza Khan <hamza.khan at arm.com>
Date: Tue, 12 May 2026 09:13:13 +0100
Subject: [PATCH] Reject invalid BF encoding when target is next instruction
When a BF instruction targets the immediately following label,
the encoded branch offset becomes zero, causing LLVM to emit
invalid machine code.
Tighten the fixup_bf_branch range check to reject this case
and emit an error instead.
Add an MC regression test to cover this case.
Assisted-by: ChatGPT; human-reviewed, debugged, tested, and
validated by the author.
---
llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp | 2 +-
llvm/test/MC/ARM/bf-invalid-target.s | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/MC/ARM/bf-invalid-target.s
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index ebf58ea054233..7c9f130024342 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -262,7 +262,7 @@ const char *ARMAsmBackend::reasonForFixupRelaxation(const MCFixup &Fixup,
break;
}
case ARM::fixup_bf_branch:
- return checkPCRelOffset(Value, 0, 30);
+ return checkPCRelOffset(Value, 2, 30);
case ARM::fixup_bf_target:
return checkPCRelOffset(Value, -0x10000, +0xfffe);
case ARM::fixup_bfl_target:
diff --git a/llvm/test/MC/ARM/bf-invalid-target.s b/llvm/test/MC/ARM/bf-invalid-target.s
new file mode 100644
index 0000000000000..0141e3083e1a9
--- /dev/null
+++ b/llvm/test/MC/ARM/bf-invalid-target.s
@@ -0,0 +1,14 @@
+@ RUN: not llvm-mc -triple arm-none-eabi -mcpu=cortex-m55 -filetype=obj %s -o /dev/null 2>&1 | FileCheck %s
+
+.text
+bf label, __myfunc
+label:
+ b __myfunc
+
+.section .text.foo, "ax", %progbits
+.type __myfunc, %function
+.global __myfunc
+__myfunc:
+ nop
+
+@ CHECK: error: out of range pc-relative fixup value
More information about the llvm-commits
mailing list