From: Ard Biesheuvel <ardb+git@google.com>
To: linux-kernel@vger.kernel.org
Cc: Ard Biesheuvel <ardb@kernel.org>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Andy Lutomirski <luto@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Uros Bizjak <ubizjak@gmail.com>, Dennis Zhou <dennis@kernel.org>,
Tejun Heo <tj@kernel.org>, Christoph Lameter <cl@linux.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Juergen Gross <jgross@suse.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Arnd Bergmann <arnd@arndb.de>,
Masahiro Yamada <masahiroy@kernel.org>,
Kees Cook <kees@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Keith Packard <keithp@keithp.com>,
Justin Stitt <justinstitt@google.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
linux-doc@vger.kernel.org, linux-pm@vger.kernel.org,
kvm@vger.kernel.org, xen-devel@lists.xenproject.org,
linux-efi@vger.kernel.org, linux-arch@vger.kernel.org,
linux-sparse@vger.kernel.org, linux-kbuild@vger.kernel.org,
linux-perf-users@vger.kernel.org,
rust-for-linux@vger.kernel.org, llvm@lists.linux.dev
Subject: [RFC PATCH 28/28] x86/tools: Drop x86_64 support from 'relocs' tool
Date: Wed, 25 Sep 2024 17:01:28 +0200 [thread overview]
Message-ID: <20240925150059.3955569-58-ardb+git@google.com> (raw)
In-Reply-To: <20240925150059.3955569-30-ardb+git@google.com>
From: Ard Biesheuvel <ardb@kernel.org>
The relocs tool is no longer used on vmlinux, which is the only 64-bit
ELF executable that it used to operate on in the 64-bit build. (It is
still used for parts of the decompressor)
So drop the 64-bit handling - it is dead code now.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
arch/x86/tools/Makefile | 2 +-
arch/x86/tools/relocs.c | 178 +-------------------
arch/x86/tools/relocs.h | 9 +-
arch/x86/tools/relocs_64.c | 18 --
arch/x86/tools/relocs_common.c | 11 +-
5 files changed, 9 insertions(+), 209 deletions(-)
diff --git a/arch/x86/tools/Makefile b/arch/x86/tools/Makefile
index 7278e2545c35..f7d12a9dccfc 100644
--- a/arch/x86/tools/Makefile
+++ b/arch/x86/tools/Makefile
@@ -40,7 +40,7 @@ $(obj)/insn_sanity.o: $(srctree)/tools/arch/x86/lib/insn.c $(srctree)/tools/arch
HOST_EXTRACFLAGS += -I$(srctree)/tools/include
hostprogs += relocs
-relocs-objs := relocs_32.o relocs_64.o relocs_common.o
+relocs-objs := relocs_32.o relocs_common.o
PHONY += relocs
relocs: $(obj)/relocs
@:
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
index 22c2d3f07a57..ff5578e63ff8 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -28,12 +28,7 @@ struct relocs {
static struct relocs relocs16;
static struct relocs relocs32;
-#if ELF_BITS == 64
-static struct relocs relocs64;
-# define FMT PRIu64
-#else
# define FMT PRIu32
-#endif
struct section {
Elf_Shdr shdr;
@@ -86,10 +81,6 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
"__end_rodata_aligned|"
"__initramfs_start|"
"(jiffies|jiffies_64)|"
-#if ELF_BITS == 64
- "__per_cpu_load|"
- "__end_rodata_hpage_align|"
-#endif
"__vvar_page|"
"_end)$"
};
@@ -210,27 +201,6 @@ static const char *rel_type(unsigned type)
{
static const char *type_name[] = {
#define REL_TYPE(X) [X] = #X
-#if ELF_BITS == 64
- REL_TYPE(R_X86_64_NONE),
- REL_TYPE(R_X86_64_64),
- REL_TYPE(R_X86_64_PC64),
- REL_TYPE(R_X86_64_PC32),
- REL_TYPE(R_X86_64_GOT32),
- REL_TYPE(R_X86_64_PLT32),
- REL_TYPE(R_X86_64_COPY),
- REL_TYPE(R_X86_64_GLOB_DAT),
- REL_TYPE(R_X86_64_JUMP_SLOT),
- REL_TYPE(R_X86_64_RELATIVE),
- REL_TYPE(R_X86_64_GOTPCREL),
- REL_TYPE(R_X86_64_GOTPCRELX),
- REL_TYPE(R_X86_64_REX_GOTPCRELX),
- REL_TYPE(R_X86_64_32),
- REL_TYPE(R_X86_64_32S),
- REL_TYPE(R_X86_64_16),
- REL_TYPE(R_X86_64_PC16),
- REL_TYPE(R_X86_64_8),
- REL_TYPE(R_X86_64_PC8),
-#else
REL_TYPE(R_386_NONE),
REL_TYPE(R_386_32),
REL_TYPE(R_386_PC32),
@@ -246,7 +216,6 @@ static const char *rel_type(unsigned type)
REL_TYPE(R_386_PC8),
REL_TYPE(R_386_16),
REL_TYPE(R_386_PC16),
-#endif
#undef REL_TYPE
};
const char *name = "unknown type rel type name";
@@ -312,19 +281,9 @@ static uint32_t elf32_to_cpu(uint32_t val)
#define elf_half_to_cpu(x) elf16_to_cpu(x)
#define elf_word_to_cpu(x) elf32_to_cpu(x)
-#if ELF_BITS == 64
-static uint64_t elf64_to_cpu(uint64_t val)
-{
- return le64_to_cpu(val);
-}
-# define elf_addr_to_cpu(x) elf64_to_cpu(x)
-# define elf_off_to_cpu(x) elf64_to_cpu(x)
-# define elf_xword_to_cpu(x) elf64_to_cpu(x)
-#else
# define elf_addr_to_cpu(x) elf32_to_cpu(x)
# define elf_off_to_cpu(x) elf32_to_cpu(x)
# define elf_xword_to_cpu(x) elf32_to_cpu(x)
-#endif
static int sym_index(Elf_Sym *sym)
{
@@ -515,10 +474,7 @@ static void print_absolute_symbols(void)
int i;
const char *format;
- if (ELF_BITS == 64)
- format = "%5d %016"PRIx64" %5"PRId64" %10s %10s %12s %s\n";
- else
- format = "%5d %08"PRIx32" %5"PRId32" %10s %10s %12s %s\n";
+ format = "%5d %08"PRIx32" %5"PRId32" %10s %10s %12s %s\n";
printf("Absolute symbols\n");
printf(" Num: Value Size Type Bind Visibility Name\n");
@@ -559,10 +515,7 @@ static void print_absolute_relocs(void)
int i, printed = 0;
const char *format;
- if (ELF_BITS == 64)
- format = "%016"PRIx64" %016"PRIx64" %10s %016"PRIx64" %s\n";
- else
- format = "%08"PRIx32" %08"PRIx32" %10s %08"PRIx32" %s\n";
+ format = "%08"PRIx32" %08"PRIx32" %10s %08"PRIx32" %s\n";
for (i = 0; i < shnum; i++) {
struct section *sec = &secs[i];
@@ -694,104 +647,6 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
}
}
-#if ELF_BITS == 64
-
-static int do_reloc64(struct section *sec, Elf_Rel *rel, ElfW(Sym) *sym,
- const char *symname)
-{
- unsigned r_type = ELF64_R_TYPE(rel->r_info);
- ElfW(Addr) offset = rel->r_offset;
- int shn_abs = (sym->st_shndx == SHN_ABS) && !is_reloc(S_REL, symname);
-
- if (sym->st_shndx == SHN_UNDEF)
- return 0;
-
- switch (r_type) {
- case R_X86_64_NONE:
- /* NONE can be ignored. */
- break;
-
- case R_X86_64_PC32:
- case R_X86_64_PLT32:
- /*
- * PC relative relocations don't need to be adjusted.
- *
- * NB: R_X86_64_PLT32 can be treated as R_X86_64_PC32.
- */
- break;
-
- case R_X86_64_PC64:
- /*
- * Only used by jump labels
- */
- break;
-
- case R_X86_64_32:
- case R_X86_64_32S:
- case R_X86_64_64:
- case R_X86_64_GOTPCREL:
- if (shn_abs) {
- /*
- * Whitelisted absolute symbols do not require
- * relocation.
- */
- if (is_reloc(S_ABS, symname))
- break;
-
- die("Invalid absolute %s relocation: %s\n", rel_type(r_type), symname);
- break;
- }
-
- if (r_type == R_X86_64_GOTPCREL) {
- Elf_Shdr *s = &secs[sec->shdr.sh_info].shdr;
- unsigned file_off = offset - s->sh_addr + s->sh_offset;
-
- /*
- * GOTPCREL relocations refer to instructions that load
- * a 64-bit address via a 32-bit relative reference to
- * the GOT. In this case, it is the GOT entry that
- * needs to be fixed up, not the immediate offset in
- * the opcode. Note that the linker will have applied an
- * addend of -4 to compensate for the delta between the
- * relocation offset and the value of RIP when the
- * instruction executes, and this needs to be backed out
- * again. (Addends other than -4 are permitted in
- * principle, but make no sense in practice so they are
- * not supported.)
- */
- if (rel->r_addend != -4) {
- die("invalid addend (%ld) for %s relocation: %s\n",
- rel->r_addend, rel_type(r_type), symname);
- break;
- }
- offset += 4 + (int32_t)get_unaligned_le32(elf_image + file_off);
- }
-
- /*
- * Relocation offsets for 64 bit kernels are output
- * as 32 bits and sign extended back to 64 bits when
- * the relocations are processed.
- * Make sure that the offset will fit.
- */
- if ((int32_t)offset != (int64_t)offset)
- die("Relocation offset doesn't fit in 32 bits\n");
-
- if (r_type == R_X86_64_64 || r_type == R_X86_64_GOTPCREL)
- add_reloc(&relocs64, offset);
- else
- add_reloc(&relocs32, offset);
- break;
-
- default:
- die("Unsupported relocation type: %s (%d)\n", rel_type(r_type), r_type);
- break;
- }
-
- return 0;
-}
-
-#else
-
static int do_reloc32(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,
const char *symname)
{
@@ -902,8 +757,6 @@ static int do_reloc_real(struct section *sec, Elf_Rel *rel, Elf_Sym *sym, const
return 0;
}
-#endif
-
static int cmp_relocs(const void *va, const void *vb)
{
const uint32_t *a, *b;
@@ -939,17 +792,10 @@ static void emit_relocs(int as_text, int use_real_mode)
int (*write_reloc)(uint32_t, FILE *) = write32;
int (*do_reloc)(struct section *sec, Elf_Rel *rel, Elf_Sym *sym, const char *symname);
-#if ELF_BITS == 64
- if (!use_real_mode)
- do_reloc = do_reloc64;
- else
- die("--realmode not valid for a 64-bit ELF file");
-#else
if (!use_real_mode)
do_reloc = do_reloc32;
else
do_reloc = do_reloc_real;
-#endif
/* Collect up the relocations */
walk_relocs(do_reloc);
@@ -959,11 +805,7 @@ static void emit_relocs(int as_text, int use_real_mode)
/* Order the relocations for more efficient processing */
sort_relocs(&relocs32);
-#if ELF_BITS == 64
- sort_relocs(&relocs64);
-#else
sort_relocs(&relocs16);
-#endif
/* Print the relocations */
if (as_text) {
@@ -984,16 +826,6 @@ static void emit_relocs(int as_text, int use_real_mode)
for (i = 0; i < relocs32.count; i++)
write_reloc(relocs32.offset[i], stdout);
} else {
-#if ELF_BITS == 64
- /* Print a stop */
- write_reloc(0, stdout);
-
- /* Now print each relocation */
- for (i = 0; i < relocs64.count; i++)
- if (!i || relocs64.offset[i] != relocs64.offset[i - 1])
- write_reloc(relocs64.offset[i], stdout);
-#endif
-
/* Print a stop */
write_reloc(0, stdout);
@@ -1027,12 +859,6 @@ static void print_reloc_info(void)
walk_relocs(do_reloc_info);
}
-#if ELF_BITS == 64
-# define process process_64
-#else
-# define process process_32
-#endif
-
void process(FILE *fp, int use_real_mode, int as_text,
int show_absolute_syms, int show_absolute_relocs,
int show_reloc_info)
diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h
index 7a509604ff92..ef9eec96bd62 100644
--- a/arch/x86/tools/relocs.h
+++ b/arch/x86/tools/relocs.h
@@ -32,10 +32,7 @@ enum symtype {
S_NSYMTYPES
};
-void process_32(FILE *fp, int use_real_mode, int as_text,
- int show_absolute_syms, int show_absolute_relocs,
- int show_reloc_info);
-void process_64(FILE *fp, int use_real_mode, int as_text,
- int show_absolute_syms, int show_absolute_relocs,
- int show_reloc_info);
+void process(FILE *fp, int use_real_mode, int as_text,
+ int show_absolute_syms, int show_absolute_relocs,
+ int show_reloc_info);
#endif /* RELOCS_H */
diff --git a/arch/x86/tools/relocs_64.c b/arch/x86/tools/relocs_64.c
deleted file mode 100644
index 9029cb619cb1..000000000000
--- a/arch/x86/tools/relocs_64.c
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "relocs.h"
-
-#define ELF_BITS 64
-
-#define ELF_MACHINE EM_X86_64
-#define ELF_MACHINE_NAME "x86_64"
-#define SHT_REL_TYPE SHT_RELA
-#define Elf_Rel Elf64_Rela
-
-#define ELF_CLASS ELFCLASS64
-#define ELF_R_SYM(val) ELF64_R_SYM(val)
-#define ELF_R_TYPE(val) ELF64_R_TYPE(val)
-#define ELF_ST_TYPE(o) ELF64_ST_TYPE(o)
-#define ELF_ST_BIND(o) ELF64_ST_BIND(o)
-#define ELF_ST_VISIBILITY(o) ELF64_ST_VISIBILITY(o)
-
-#include "relocs.c"
diff --git a/arch/x86/tools/relocs_common.c b/arch/x86/tools/relocs_common.c
index 6634352a20bc..167985ecd544 100644
--- a/arch/x86/tools/relocs_common.c
+++ b/arch/x86/tools/relocs_common.c
@@ -72,14 +72,9 @@ int main(int argc, char **argv)
die("Cannot read %s: %s", fname, strerror(errno));
}
rewind(fp);
- if (e_ident[EI_CLASS] == ELFCLASS64)
- process_64(fp, use_real_mode, as_text,
- show_absolute_syms, show_absolute_relocs,
- show_reloc_info);
- else
- process_32(fp, use_real_mode, as_text,
- show_absolute_syms, show_absolute_relocs,
- show_reloc_info);
+ process(fp, use_real_mode, as_text,
+ show_absolute_syms, show_absolute_relocs,
+ show_reloc_info);
fclose(fp);
return 0;
}
--
2.46.0.792.g87dc391469-goog
prev parent reply other threads:[~2024-09-25 15:03 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-25 15:01 [RFC PATCH 00/28] x86: Rely on toolchain for relocatable code Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 01/28] x86/pvh: Call C code via the kernel virtual mapping Ard Biesheuvel
2024-09-25 21:12 ` Jason Andryuk
2024-09-25 15:01 ` [RFC PATCH 02/28] Documentation: Bump minimum GCC version to 8.1 Ard Biesheuvel
2024-09-25 15:58 ` Arnd Bergmann
2024-12-19 11:53 ` Mark Rutland
2024-12-19 12:02 ` Arnd Bergmann
2024-09-26 21:35 ` Miguel Ojeda
2024-09-27 16:22 ` Mark Rutland
2024-09-25 15:01 ` [RFC PATCH 03/28] x86/tools: Use mmap() to simplify relocs host tool Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 04/28] x86/boot: Permit GOTPCREL relocations for x86_64 builds Ard Biesheuvel
2024-10-01 5:33 ` Josh Poimboeuf
2024-10-01 6:56 ` Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 05/28] x86: Define the stack protector guard symbol explicitly Ard Biesheuvel
2024-09-25 15:53 ` Ian Rogers
2024-09-25 17:43 ` Ard Biesheuvel
2024-09-25 17:48 ` Ian Rogers
2024-09-25 18:32 ` Uros Bizjak
2024-09-28 13:41 ` Brian Gerst
2024-10-04 13:15 ` Ard Biesheuvel
2024-10-08 14:36 ` Brian Gerst
2024-10-04 10:01 ` Uros Bizjak
2024-09-25 15:01 ` [RFC PATCH 06/28] x86/percpu: Get rid of absolute per-CPU variable placement Ard Biesheuvel
2024-09-25 17:56 ` Christoph Lameter (Ampere)
2024-09-25 15:01 ` [RFC PATCH 07/28] scripts/kallsyms: Avoid 0x0 as the relative base Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 08/28] scripts/kallsyms: Remove support for absolute per-CPU variables Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 09/28] x86/tools: Remove special relocation handling for " Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 10/28] x86/xen: Avoid relocatable quantities in Xen ELF notes Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 11/28] x86/pvh: Avoid absolute symbol references in .head.text Ard Biesheuvel
2024-09-25 21:10 ` Jason Andryuk
2024-09-25 21:50 ` Ard Biesheuvel
2024-09-25 22:40 ` Jason Andryuk
2024-09-25 15:01 ` [RFC PATCH 12/28] x86/pm-trace: Use RIP-relative accesses for .tracedata Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 13/28] x86/kvm: Use RIP-relative addressing Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 14/28] x86/rethook: Use RIP-relative reference for return address Ard Biesheuvel
2024-09-25 16:39 ` Linus Torvalds
2024-09-25 16:45 ` Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 15/28] x86/sync_core: Use RIP-relative addressing Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 16/28] x86/entry_64: " Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 17/28] x86/hibernate: Prefer RIP-relative accesses Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 18/28] x86/boot/64: Determine VA/PA offset before entering C code Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 19/28] x86/boot/64: Avoid intentional absolute symbol references in .head.text Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 20/28] x64/acpi: Use PIC-compatible references in wakeup_64.S Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 21/28] x86/head: Use PIC-compatible symbol references in startup code Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 22/28] asm-generic: Treat PIC .data.rel.ro sections as .rodata Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 23/28] tools/objtool: Mark generated sections as writable Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 24/28] tools/objtool: Treat indirect ftrace calls as direct calls Ard Biesheuvel
2024-10-01 7:18 ` Josh Poimboeuf
2024-10-01 7:39 ` Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 25/28] x86: Use PIE codegen for the core kernel Ard Biesheuvel
2024-10-01 21:13 ` H. Peter Anvin
2024-10-02 15:25 ` Ard Biesheuvel
2024-10-02 20:01 ` Linus Torvalds
2024-10-03 11:13 ` Ard Biesheuvel
2024-10-04 21:06 ` H. Peter Anvin
2024-10-05 8:31 ` Uros Bizjak
2024-10-05 23:36 ` H. Peter Anvin
2024-10-06 0:00 ` Linus Torvalds
2024-10-06 8:06 ` Uros Bizjak
2024-10-06 7:59 ` Uros Bizjak
2024-10-06 18:00 ` David Laight
2024-10-06 19:17 ` Uros Bizjak
2024-10-06 19:38 ` H. Peter Anvin
2024-09-25 15:01 ` [RFC PATCH 26/28] x86/boot: Implement support for ELF RELA/RELR relocations Ard Biesheuvel
2024-09-25 15:01 ` [RFC PATCH 27/28] x86/kernel: Switch to PIE linking for the core kernel Ard Biesheuvel
2024-09-25 18:54 ` Uros Bizjak
2024-09-25 19:14 ` Ard Biesheuvel
2024-09-25 19:39 ` Uros Bizjak
2024-09-25 20:01 ` Ard Biesheuvel
2024-09-25 20:22 ` Uros Bizjak
2024-09-25 20:24 ` Vegard Nossum
2024-09-26 13:38 ` Ard Biesheuvel
2024-09-25 15:01 ` Ard Biesheuvel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240925150059.3955569-58-ardb+git@google.com \
--to=ardb+git@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=boris.ostrovsky@oracle.com \
--cc=cl@linux.com \
--cc=dennis@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=irogers@google.com \
--cc=jgross@suse.com \
--cc=jolsa@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=justinstitt@google.com \
--cc=kan.liang@linux.intel.com \
--cc=kees@kernel.org \
--cc=keithp@keithp.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-sparse@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=luto@kernel.org \
--cc=masahiroy@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=namhyung@kernel.org \
--cc=nathan@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tj@kernel.org \
--cc=ubizjak@gmail.com \
--cc=vkuznets@redhat.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).