sort_main_extable

参考:Linux异常表

1.函数调用关系

asmlinkage void __init start_kernel(void)
    -->sort_main_extable();
        -->sort_extable(__start___ex_table, __stop___ex_table);
            -->sort(start, finish - start, sizeof(struct exception_table_entry),cmp_ex, NULL);

2.结构体说明

/*
 * The exception table consists of pairs of addresses: the first is the
 * address of an instruction that is allowed to fault, and the second is
 * the address at which the program should continue.  No registers are
 * modified, so it is entirely up to the continuation code to figure out
 * what to do.
 *
 * All the routines below use bits of fixup code that are out of line
 * with the main instruction path.  This means when everything is well,
 * we don't even have to jump over them.  Further, they do not intrude
 * on our cache or tlb entries.
 */

struct exception_table_entry
{
    unsigned long insn, fixup;
};

3.存储段,vmlinux.lds中

         * The exception fixup table (might need resorting at runtime)
         */
        . = ALIGN(32);
        __start___ex_table = .;
#ifdef CONFIG_MMU
        *(__ex_table)
#endif
        __stop___ex_table = .;
原文地址:https://www.cnblogs.com/yangjiguang/p/8298808.html