From: Matt Mackall Replace exception table insertion sort with lib/sort Signed-off-by: Matt Mackall Signed-off-by: Andrew Morton --- 25-akpm/lib/extable.c | 26 +++++++++----------------- 1 files changed, 9 insertions(+), 17 deletions(-) diff -puN lib/extable.c~lib-sort-replace-insertion-sort-in-exception-tables lib/extable.c --- 25/lib/extable.c~lib-sort-replace-insertion-sort-in-exception-tables 2005-02-04 13:00:59.294544520 -0800 +++ 25-akpm/lib/extable.c 2005-02-04 13:01:18.768584016 -0800 @@ -13,6 +13,7 @@ #include #include #include +#include #include extern struct exception_table_entry __start___ex_table[]; @@ -25,26 +26,17 @@ extern struct exception_table_entry __st * This is used both for the kernel exception table and for * the exception tables of modules that get loaded. */ +static int cmp_ex(const void *a, const void *b) +{ + const struct exception_table_entry *x = a, *y = b; + return x->insn - y->insn; +} + void sort_extable(struct exception_table_entry *start, struct exception_table_entry *finish) { - struct exception_table_entry el, *p, *q; - - /* insertion sort */ - for (p = start + 1; p < finish; ++p) { - /* start .. p-1 is sorted */ - if (p[0].insn < p[-1].insn) { - /* move element p down to its right place */ - el = *p; - q = p; - do { - /* el comes before q[-1], move q[-1] up one */ - q[0] = q[-1]; - --q; - } while (q > start && el.insn < q[-1].insn); - *q = el; - } - } + sort(start, finish - start, sizeof(struct exception_table_entry), + cmp_ex, NULL); } #endif _