modpost: define TO_NATIVE() using bswap_* functions

The current TO_NATIVE() has some limitations:

 1) You cannot cast the argument.

 2) You cannot pass a variable marked as 'const'.

 3) Passing an array is a bug, but it is not detected.

Impelement TO_NATIVE() using bswap_*() functions. These are GNU
extensions. If we face portability issues, we can port the code from
include/uapi/linux/swab.h.

With this change, get_rel_type_and_sym() can be simplified by casting
the arguments directly.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
This commit is contained in:
Masahiro Yamada
2023-10-08 02:04:46 +09:00
parent ac96a15a0f
commit bd78c9d714
2 changed files with 16 additions and 22 deletions

View File

@@ -1410,15 +1410,10 @@ static void get_rel_type_and_sym(struct elf_info *elf, uint64_t r_info,
return;
}
if (is_64bit) {
Elf64_Xword r_info64 = r_info;
r_info = TO_NATIVE(r_info64);
} else {
Elf32_Word r_info32 = r_info;
r_info = TO_NATIVE(r_info32);
}
if (is_64bit)
r_info = TO_NATIVE((Elf64_Xword)r_info);
else
r_info = TO_NATIVE((Elf32_Word)r_info);
*r_type = ELF_R_TYPE(r_info);
*r_sym = ELF_R_SYM(r_info);