mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 15:43:59 +08:00
scripts/sorttable: Unify arm64 & x86 sort functions
The format of the arm64 and x86 exception table entries is essentially the same as of commits:46d28947d9
("x86/extable: Rework the exception table mechanics")d6e2cc5647
("arm64: extable: add `type` and `data` fields") Both use a 12-byte entry consisting of two 32-bit relative offsets and 32 bits of (absolute) data, and their sort functions are identical aside from commentary, with arm64 saying: /* Don't touch the fixup type or data */ ... and x86 saying: /* Don't touch the fixup type */ Unify the two behind a common sort_relative_table_with_data() function, retaining the arm64 commentary. There should be no functional change as a result of this patch. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Borislav Petkov <bp@suse.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
This commit is contained in:
parent
fa55b7dcdc
commit
e232333be6
@ -231,7 +231,7 @@ static void sort_relative_table(char *extab_image, int image_size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void arm64_sort_relative_table(char *extab_image, int image_size)
|
static void sort_relative_table_with_data(char *extab_image, int image_size)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@ -259,34 +259,6 @@ static void arm64_sort_relative_table(char *extab_image, int image_size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void x86_sort_relative_table(char *extab_image, int image_size)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (i < image_size) {
|
|
||||||
uint32_t *loc = (uint32_t *)(extab_image + i);
|
|
||||||
|
|
||||||
w(r(loc) + i, loc);
|
|
||||||
w(r(loc + 1) + i + 4, loc + 1);
|
|
||||||
/* Don't touch the fixup type */
|
|
||||||
|
|
||||||
i += sizeof(uint32_t) * 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
qsort(extab_image, image_size / 12, 12, compare_relative_table);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < image_size) {
|
|
||||||
uint32_t *loc = (uint32_t *)(extab_image + i);
|
|
||||||
|
|
||||||
w(r(loc) - i, loc);
|
|
||||||
w(r(loc + 1) - (i + 4), loc + 1);
|
|
||||||
/* Don't touch the fixup type */
|
|
||||||
|
|
||||||
i += sizeof(uint32_t) * 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void s390_sort_relative_table(char *extab_image, int image_size)
|
static void s390_sort_relative_table(char *extab_image, int image_size)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -364,15 +336,13 @@ static int do_file(char const *const fname, void *addr)
|
|||||||
|
|
||||||
switch (r2(&ehdr->e_machine)) {
|
switch (r2(&ehdr->e_machine)) {
|
||||||
case EM_386:
|
case EM_386:
|
||||||
|
case EM_AARCH64:
|
||||||
case EM_X86_64:
|
case EM_X86_64:
|
||||||
custom_sort = x86_sort_relative_table;
|
custom_sort = sort_relative_table_with_data;
|
||||||
break;
|
break;
|
||||||
case EM_S390:
|
case EM_S390:
|
||||||
custom_sort = s390_sort_relative_table;
|
custom_sort = s390_sort_relative_table;
|
||||||
break;
|
break;
|
||||||
case EM_AARCH64:
|
|
||||||
custom_sort = arm64_sort_relative_table;
|
|
||||||
break;
|
|
||||||
case EM_PARISC:
|
case EM_PARISC:
|
||||||
case EM_PPC:
|
case EM_PPC:
|
||||||
case EM_PPC64:
|
case EM_PPC64:
|
||||||
|
Loading…
Reference in New Issue
Block a user