On Wed, 27 May 2026 20:35:23 +0800 Wang Han <[email protected]> wrote:
> Signed-off-by: Wang Han <[email protected]> > --- > scripts/sorttable.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/scripts/sorttable.c b/scripts/sorttable.c > index e8ed11c680c6..b4061c2c03e1 100644 > --- a/scripts/sorttable.c > +++ b/scripts/sorttable.c > @@ -901,11 +901,17 @@ static int do_file(char const *const fname, void *addr) > /* fallthrough */ > case EM_386: > case EM_LOONGARCH: > - case EM_RISCV: > case EM_S390: > case EM_X86_64: > custom_sort = sort_relative_table_with_data; > break; > + case EM_RISCV: > +#ifdef MCOUNT_SORT_ENABLED > + /* RISC-V uses patchable function entries before function > entry. */ > + before_func = 8; > +#endif > + custom_sort = sort_relative_table_with_data; > + break; > case EM_PARISC: > case EM_PPC: > case EM_PPC64: So basically RISCV has the same problem as ARM64 with patchable entries. As this may happen for other archs in the future, I would like to group them together like this: diff --git a/scripts/sorttable.c b/scripts/sorttable.c index e8ed11c680c6..b3d9073d9fbc 100644 --- a/scripts/sorttable.c +++ b/scripts/sorttable.c @@ -891,17 +891,23 @@ static int do_file(char const *const fname, void *addr) table_sort_t custom_sort = NULL; switch (elf_map_machine(ehdr)) { - case EM_AARCH64: #ifdef MCOUNT_SORT_ENABLED + case EM_AARCH64: sort_reloc = true; rela_type = 0x403; - /* arm64 uses patchable function entry placing before function */ + /* + * arm64 and RISCV use patchable function entry placing + * before function + */ + case RISCV: before_func = 8; +#else + case EM_AARCH64: + case RISCV: #endif /* fallthrough */ case EM_386: case EM_LOONGARCH: - case EM_RISCV: case EM_S390: case EM_X86_64: custom_sort = sort_relative_table_with_data; does the above work for you? (Although I didn't even compile test it). -- Steve
