ARM: 9299/1: module: use sign_extend32() to extend the signedness
authorMasahiro Yamada <masahiroy@kernel.org>
Tue, 30 May 2023 18:03:08 +0000 (19:03 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 19 Jun 2023 08:35:48 +0000 (09:35 +0100)
The function name clarifies the intention.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/module.c

index d59c36d..e74d84f 100644 (file)
@@ -169,8 +169,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
 
                        offset = __mem_to_opcode_arm(*(u32 *)loc);
                        offset = (offset & 0x00ffffff) << 2;
-                       if (offset & 0x02000000)
-                               offset -= 0x04000000;
+                       offset = sign_extend32(offset, 25);
 
                        offset += sym->st_value - loc;
 
@@ -236,7 +235,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
                case R_ARM_MOVT_PREL:
                        offset = tmp = __mem_to_opcode_arm(*(u32 *)loc);
                        offset = ((offset & 0xf0000) >> 4) | (offset & 0xfff);
-                       offset = (offset ^ 0x8000) - 0x8000;
+                       offset = sign_extend32(offset, 15);
 
                        offset += sym->st_value;
                        if (ELF32_R_TYPE(rel->r_info) == R_ARM_MOVT_PREL ||
@@ -344,8 +343,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
                                ((~(j2 ^ sign) & 1) << 22) |
                                ((upper & 0x03ff) << 12) |
                                ((lower & 0x07ff) << 1);
-                       if (offset & 0x01000000)
-                               offset -= 0x02000000;
+                       offset = sign_extend32(offset, 24);
                        offset += sym->st_value - loc;
 
                        /*
@@ -401,7 +399,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
                        offset = ((upper & 0x000f) << 12) |
                                ((upper & 0x0400) << 1) |
                                ((lower & 0x7000) >> 4) | (lower & 0x00ff);
-                       offset = (offset ^ 0x8000) - 0x8000;
+                       offset = sign_extend32(offset, 15);
                        offset += sym->st_value;
 
                        if (ELF32_R_TYPE(rel->r_info) == R_ARM_THM_MOVT_PREL ||