Skip to content

Commit

Permalink
scripts/sorttable: Unify arm64 & x86 sort functions
Browse files Browse the repository at this point in the history
The format of the arm64 and x86 exception table entries is essentially
the same as of commits:

  46d2894 ("x86/extable: Rework the exception table mechanics")
  d6e2cc5 ("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>
  • Loading branch information
Mark Rutland authored and Palmer Dabbelt committed Jan 5, 2022
1 parent fa55b7d commit e232333
Showing 1 changed file with 3 additions and 33 deletions.
36 changes: 3 additions & 33 deletions scripts/sorttable.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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)
{
int i;
Expand Down Expand Up @@ -364,15 +336,13 @@ static int do_file(char const *const fname, void *addr)

switch (r2(&ehdr->e_machine)) {
case EM_386:
case EM_AARCH64:
case EM_X86_64:
custom_sort = x86_sort_relative_table;
custom_sort = sort_relative_table_with_data;
break;
case EM_S390:
custom_sort = s390_sort_relative_table;
break;
case EM_AARCH64:
custom_sort = arm64_sort_relative_table;
break;
case EM_PARISC:
case EM_PPC:
case EM_PPC64:
Expand Down

0 comments on commit e232333

Please sign in to comment.