mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-14 06:35:12 +00:00
c05780ef3c
RISC-V has an extended form of mapping symbols that we use to encode the ISA when it changes in the middle of an ELF. This trips up modpost as a build failure, I haven't yet verified it yet but I believe the kallsyms difference should result in stacks looking sane again. Reported-by: Randy Dunlap <rdunlap@infradead.org> Closes: https://lore.kernel.org/all/9d9e2902-5489-4bf0-d9cb-556c8e5d71c2@infradead.org/ Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> Reviewed-by: Randy Dunlap <rdunlap@infradead.org> Tested-by: Randy Dunlap <rdunlap@infradead.org> # build-tested Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
27 lines
923 B
C
27 lines
923 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
#ifndef _LINUX_MODULE_SYMBOL_H
|
||
#define _LINUX_MODULE_SYMBOL_H
|
||
|
||
/* This ignores the intensely annoying "mapping symbols" found in ELF files. */
|
||
static inline int is_mapping_symbol(const char *str, int is_riscv)
|
||
{
|
||
if (str[0] == '.' && str[1] == 'L')
|
||
return true;
|
||
if (str[0] == 'L' && str[1] == '0')
|
||
return true;
|
||
/*
|
||
* RISC-V defines various special symbols that start with "$". The
|
||
* mapping symbols, which exist to differentiate between incompatible
|
||
* instruction encodings when disassembling, show up all over the place
|
||
* and are generally not meant to be treated like other symbols. So
|
||
* just ignore any of the special symbols.
|
||
*/
|
||
if (is_riscv)
|
||
return str[0] == '$';
|
||
|
||
return str[0] == '$' &&
|
||
(str[1] == 'a' || str[1] == 'd' || str[1] == 't' || str[1] == 'x')
|
||
&& (str[2] == '\0' || str[2] == '.');
|
||
}
|
||
|
||
#endif /* _LINUX_MODULE_SYMBOL_H */
|