diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-02-25 11:01:09 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-02-25 11:01:09 +0300 |
commit | 319e305ca469d9484678d2916590005b08cc3b4b (patch) | |
tree | ffee522a28589e4ba78b616bcde76dac4cc3c667 /scripts | |
parent | c0853867a10f9215132dccdb84c720a5f856f4d2 (diff) | |
parent | b2f9d678e28ca71ce650eac82f26dd287b47e89a (diff) | |
download | linux-319e305ca469d9484678d2916590005b08cc3b4b.tar.xz |
Merge branch 'ras/core' into core/objtool, to pick up the new exception table format
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/sortextable.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/scripts/sortextable.c b/scripts/sortextable.c index c2423d913b46..7b29fb14f870 100644 --- a/scripts/sortextable.c +++ b/scripts/sortextable.c @@ -209,6 +209,35 @@ static int compare_relative_table(const void *a, const void *b) return 0; } +static void x86_sort_relative_table(char *extab_image, int image_size) +{ + int i; + + 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); + w(r(loc + 2) + i + 8, loc + 2); + + 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); + w(r(loc + 2) - (i + 8), loc + 2); + + i += sizeof(uint32_t) * 3; + } +} + static void sort_relative_table(char *extab_image, int image_size) { int i; @@ -281,6 +310,9 @@ do_file(char const *const fname) break; case EM_386: case EM_X86_64: + custom_sort = x86_sort_relative_table; + break; + case EM_S390: custom_sort = sort_relative_table; break; |