Add the RHEL 211.21.1..211.22.1 backports (1288-1351) from centos-stream-10 and upstream stable, on top of 211.20.1. Bump pkgrelease and specrelease to 211.22.1. (The redhat/ automotive rebuild-changelog tooling change is omitted: it patches redhat/scripts not present in this build base and does not affect the kernel.)
204 lines
6.2 KiB
Diff
204 lines
6.2 KiB
Diff
From 133d6f7d2c3e689e3191bf973e07819dda085f60 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Marchand <jmarchan@redhat.com>
|
|
Date: Mon, 1 Jun 2026 15:22:43 +0200
|
|
Subject: [PATCH] scripts/sorttable: Add helper functions for Elf_Sym
|
|
|
|
JIRA: https://redhat.atlassian.net/browse/RHEL-180193
|
|
|
|
commit 17bed33ac12f011f4695059960e1b1d6457229a7
|
|
Author: Steven Rostedt <rostedt@goodmis.org>
|
|
Date: Sun Jan 5 11:22:22 2025 -0500
|
|
|
|
scripts/sorttable: Add helper functions for Elf_Sym
|
|
|
|
In order to remove the double #include of sorttable.h for 64 and 32 bit
|
|
to create duplicate functions, add helper functions for Elf_Sym. This
|
|
will create a function pointer for each helper that will get assigned to
|
|
the appropriate function to handle either the 64bit or 32bit version.
|
|
|
|
This also removes the last references of etype and _r() macros from the
|
|
sorttable.h file as their references are now just defined in the
|
|
appropriate architecture version of the helper functions. All read
|
|
functions now exist in the helper functions which makes it easier to
|
|
maintain, as the helper functions define the necessary architecture sizes.
|
|
|
|
Cc: bpf <bpf@vger.kernel.org>
|
|
Cc: Masami Hiramatsu <mhiramat@kernel.org>
|
|
Cc: Mark Rutland <mark.rutland@arm.com>
|
|
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
|
Cc: Andrew Morton <akpm@linux-foundation.org>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Cc: Masahiro Yamada <masahiroy@kernel.org>
|
|
Cc: Nathan Chancellor <nathan@kernel.org>
|
|
Cc: Nicolas Schier <nicolas@fjasle.eu>
|
|
Cc: Zheng Yejian <zhengyejian1@huawei.com>
|
|
Cc: Martin Kelly <martin.kelly@crowdstrike.com>
|
|
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
|
|
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
|
Link: https://lore.kernel.org/20250105162346.185740651@goodmis.org
|
|
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
|
|
|
|
Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
|
|
|
|
diff --git a/scripts/sorttable.c b/scripts/sorttable.c
|
|
index b2b96ff261d6..20615de18276 100644
|
|
--- a/scripts/sorttable.c
|
|
+++ b/scripts/sorttable.c
|
|
@@ -152,6 +152,53 @@ SHDR_WORD(link)
|
|
SHDR_WORD(name)
|
|
SHDR_WORD(type)
|
|
|
|
+#define SYM_ADDR(fn_name) \
|
|
+static uint64_t sym64_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r8(&sym->e64.st_##fn_name); \
|
|
+} \
|
|
+ \
|
|
+static uint64_t sym32_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r(&sym->e32.st_##fn_name); \
|
|
+}
|
|
+
|
|
+#define SYM_WORD(fn_name) \
|
|
+static uint32_t sym64_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r(&sym->e64.st_##fn_name); \
|
|
+} \
|
|
+ \
|
|
+static uint32_t sym32_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r(&sym->e32.st_##fn_name); \
|
|
+}
|
|
+
|
|
+#define SYM_HALF(fn_name) \
|
|
+static uint16_t sym64_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r2(&sym->e64.st_##fn_name); \
|
|
+} \
|
|
+ \
|
|
+static uint16_t sym32_##fn_name(Elf_Sym *sym) \
|
|
+{ \
|
|
+ return r2(&sym->e32.st_##fn_name); \
|
|
+}
|
|
+
|
|
+static uint8_t sym64_type(Elf_Sym *sym)
|
|
+{
|
|
+ return ELF64_ST_TYPE(sym->e64.st_info);
|
|
+}
|
|
+
|
|
+static uint8_t sym32_type(Elf_Sym *sym)
|
|
+{
|
|
+ return ELF32_ST_TYPE(sym->e32.st_info);
|
|
+}
|
|
+
|
|
+SYM_ADDR(value)
|
|
+SYM_WORD(name)
|
|
+SYM_HALF(shndx)
|
|
+
|
|
/*
|
|
* Get the whole file as a programming convenience in order to avoid
|
|
* malloc+lseek+read+free of many pieces. If successful, then mmap
|
|
diff --git a/scripts/sorttable.h b/scripts/sorttable.h
|
|
index af3a5f0209a3..ef7e5161db31 100644
|
|
--- a/scripts/sorttable.h
|
|
+++ b/scripts/sorttable.h
|
|
@@ -23,10 +23,7 @@
|
|
#undef sort_mcount_loc
|
|
#undef elf_mcount_loc
|
|
#undef do_sort
|
|
-#undef ELF_ST_TYPE
|
|
#undef uint_t
|
|
-#undef _r
|
|
-#undef etype
|
|
#undef ehdr_shoff
|
|
#undef ehdr_shentsize
|
|
#undef ehdr_shstrndx
|
|
@@ -38,6 +35,10 @@
|
|
#undef shdr_name
|
|
#undef shdr_type
|
|
#undef shdr_entsize
|
|
+#undef sym_type
|
|
+#undef sym_name
|
|
+#undef sym_value
|
|
+#undef sym_shndx
|
|
|
|
#ifdef SORTTABLE_64
|
|
# define extable_ent_size 16
|
|
@@ -46,10 +47,7 @@
|
|
# define sort_mcount_loc sort_mcount_loc_64
|
|
# define elf_mcount_loc elf_mcount_loc_64
|
|
# define do_sort do_sort_64
|
|
-# define ELF_ST_TYPE ELF64_ST_TYPE
|
|
# define uint_t uint64_t
|
|
-# define _r r8
|
|
-# define etype e64
|
|
# define ehdr_shoff ehdr64_shoff
|
|
# define ehdr_shentsize ehdr64_shentsize
|
|
# define ehdr_shstrndx ehdr64_shstrndx
|
|
@@ -61,6 +59,10 @@
|
|
# define shdr_name shdr64_name
|
|
# define shdr_type shdr64_type
|
|
# define shdr_entsize shdr64_entsize
|
|
+# define sym_type sym64_type
|
|
+# define sym_name sym64_name
|
|
+# define sym_value sym64_value
|
|
+# define sym_shndx sym64_shndx
|
|
#else
|
|
# define extable_ent_size 8
|
|
# define compare_extable compare_extable_32
|
|
@@ -68,10 +70,7 @@
|
|
# define sort_mcount_loc sort_mcount_loc_32
|
|
# define elf_mcount_loc elf_mcount_loc_32
|
|
# define do_sort do_sort_32
|
|
-# define ELF_ST_TYPE ELF32_ST_TYPE
|
|
# define uint_t uint32_t
|
|
-# define _r r
|
|
-# define etype e32
|
|
# define ehdr_shoff ehdr32_shoff
|
|
# define ehdr_shentsize ehdr32_shentsize
|
|
# define ehdr_shstrndx ehdr32_shstrndx
|
|
@@ -83,6 +82,10 @@
|
|
# define shdr_name shdr32_name
|
|
# define shdr_type shdr32_type
|
|
# define shdr_entsize shdr32_entsize
|
|
+# define sym_type sym32_type
|
|
+# define sym_name sym32_name
|
|
+# define sym_value sym32_value
|
|
+# define sym_shndx sym32_shndx
|
|
#endif
|
|
|
|
#if defined(SORTTABLE_64) && defined(UNWINDER_ORC_ENABLED)
|
|
@@ -414,9 +417,9 @@ static int do_sort(Elf_Ehdr *ehdr,
|
|
|
|
for (sym = sym_start; (void *)sym + symentsize < sym_end;
|
|
sym = (void *)sym + symentsize) {
|
|
- if (ELF_ST_TYPE(sym->etype.st_info) != STT_OBJECT)
|
|
+ if (sym_type(sym) != STT_OBJECT)
|
|
continue;
|
|
- if (!strcmp(strtab + r(&sym->etype.st_name),
|
|
+ if (!strcmp(strtab + sym_name(sym),
|
|
"main_extable_sort_needed")) {
|
|
sort_needed_sym = sym;
|
|
break;
|
|
@@ -430,14 +433,13 @@ static int do_sort(Elf_Ehdr *ehdr,
|
|
goto out;
|
|
}
|
|
|
|
- sort_need_index = get_secindex(r2(&sym->etype.st_shndx),
|
|
+ sort_need_index = get_secindex(sym_shndx(sym),
|
|
((void *)sort_needed_sym - (void *)symtab) / symentsize,
|
|
symtab_shndx);
|
|
sort_needed_sec = get_index(shdr_start, shentsize, sort_need_index);
|
|
sort_needed_loc = (void *)ehdr +
|
|
shdr_offset(sort_needed_sec) +
|
|
- _r(&sort_needed_sym->etype.st_value) -
|
|
- shdr_addr(sort_needed_sec);
|
|
+ sym_value(sort_needed_sym) - shdr_addr(sort_needed_sec);
|
|
|
|
/* extable has been sorted, clear the flag */
|
|
w(0, sort_needed_loc);
|
|
--
|
|
2.50.1 (Apple Git-155)
|
|
|