From nobody Sun Feb 8 11:59:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB4081D0DEB; Tue, 3 Sep 2024 04:00:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725336036; cv=none; b=kDCKgBjnqT1E4QNNcMUk9nauDjWtfXGpSFmOzVjNo84H0YEZYh2R3yu02Zbe1DHvE5ODiZBDSUsLOLnuFDq6+s7l7w1A/jn+BDUw5QYQNMjHunYgL2VF00IUUsyAFq33+h5nAGPgb434P4VEHkA0SY7PVJR6epoy/KDLFozWdro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725336036; c=relaxed/simple; bh=BtVquJSftqUBmhf9tSLjp9ytg/driSytPQ0zkeW/6ls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xug4MsNTbXaVLEc2XHsDtkOWIdUejrHiXQ7izogPFXAO/mI76uWD+ymhwecNWOlJw75om+6otcNE+j3xY+9Xir80MjeqEcHEATU/Hrz7FFDpI/QnCmh53t+VdBCarNcE6JlGZtI/XyTVrEC+sj4ijcQqBeE5UMzqxqS9iFtYaaw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UrpCr16X; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UrpCr16X" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58240C4CECA; Tue, 3 Sep 2024 04:00:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1725336035; bh=BtVquJSftqUBmhf9tSLjp9ytg/driSytPQ0zkeW/6ls=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UrpCr16Xj6P6aLlmOxmk6PseYF3o+rZY2Xel1RmNF1tdcZZ7WlGTaGUDlfay1OKKk tMF5zULr96XyhuZI2cazrsUjsJki4P/u2v/MugqDAEKVT9iReKyssYJ//wH+YDYD2+ MdFPfRM236AKilR79sg0tUoOi16a9wum7Pam7GUWO0EpUWdAkxdDLK20/7x+LSV71k R8U8pp6ZUbAfP2COTzgY2MZktsfss4eUoIp3HMesBNOr6A4P1wSWdXZ9kmBCY9HEhJ 0Zb5RRNycz4h2Ay/QR4IcyttCm4LaAiGsEIrSRkOeVDDWG0WXfT9mg26qvhISy0FLg Zc+zplU0gH0rw== From: Josh Poimboeuf To: live-patching@vger.kernel.org Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Miroslav Benes , Petr Mladek , Joe Lawrence , Jiri Kosina , Peter Zijlstra , Marcos Paulo de Souza , Song Liu Subject: [RFC 13/31] objtool: Support references to all symbol types in special sections Date: Mon, 2 Sep 2024 20:59:56 -0700 Message-ID: <08657a8071475e802dd63e3392338a8f950b61bb.1725334260.git.jpoimboe@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make the code simpler and more flexible. Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 74 +++++++++---------------------------------- 1 file changed, 15 insertions(+), 59 deletions(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 92171ce458ec..9212b5edffc8 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -595,15 +595,7 @@ static int add_dead_ends(struct objtool_file *file) goto reachable; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type =3D=3D STT_SECTION) { - offset =3D reloc_addend(reloc); - } else if (reloc->sym->local_label) { - offset =3D reloc->sym->offset; - } else { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } - + offset =3D reloc->sym->offset + reloc_addend(reloc); insn =3D find_insn(file, reloc->sym->sec, offset); if (insn) insn =3D prev_insn_same_sec(file, insn); @@ -635,15 +627,7 @@ static int add_dead_ends(struct objtool_file *file) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type =3D=3D STT_SECTION) { - offset =3D reloc_addend(reloc); - } else if (reloc->sym->local_label) { - offset =3D reloc->sym->offset; - } else { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } - + offset =3D reloc->sym->offset + reloc_addend(reloc); insn =3D find_insn(file, reloc->sym->sec, offset); if (insn) insn =3D prev_insn_same_sec(file, insn); @@ -1274,12 +1258,9 @@ static int add_ignore_alternatives(struct objtool_fi= le *file) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type !=3D STT_SECTION) { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.ignore_alts entry"); return -1; @@ -2255,15 +2236,7 @@ static int read_unwind_hints(struct objtool_file *fi= le) return -1; } =20 - if (reloc->sym->type =3D=3D STT_SECTION) { - offset =3D reloc_addend(reloc); - } else if (reloc->sym->local_label) { - offset =3D reloc->sym->offset; - } else { - WARN("unexpected relocation symbol type in %s", sec->rsec->name); - return -1; - } - + offset =3D reloc->sym->offset + reloc_addend(reloc); insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("can't find insn for unwind_hints[%d]", i); @@ -2356,12 +2329,9 @@ static int read_retpoline_hints(struct objtool_file = *file) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type !=3D STT_SECTION) { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.retpoline_safe entry"); return -1; @@ -2392,12 +2362,9 @@ static int read_instr_hints(struct objtool_file *fil= e) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type !=3D STT_SECTION) { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.instr_end entry"); return -1; @@ -2411,12 +2378,9 @@ static int read_instr_hints(struct objtool_file *fil= e) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type !=3D STT_SECTION) { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.instr_begin entry"); return -1; @@ -2439,12 +2403,9 @@ static int read_validate_unret_hints(struct objtool_= file *file) return 0; =20 for_each_reloc(rsec, reloc) { - if (reloc->sym->type !=3D STT_SECTION) { - WARN("unexpected relocation symbol type in %s", rsec->name); - return -1; - } + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.instr_end entry"); return -1; @@ -2468,14 +2429,9 @@ static int read_intra_function_calls(struct objtool_= file *file) =20 for_each_reloc(rsec, reloc) { unsigned long dest_off; + unsigned long offset =3D reloc->sym->offset + reloc_addend(reloc); =20 - if (!is_section_symbol(reloc->sym)) { - WARN("unexpected relocation symbol type in %s", - rsec->name); - return -1; - } - - insn =3D find_insn(file, reloc->sym->sec, reloc_addend(reloc)); + insn =3D find_insn(file, reloc->sym->sec, offset); if (!insn) { WARN("bad .discard.intra_function_call entry"); return -1; --=20 2.45.2