On 2020-03-23 16:22, Nick Desaulniers wrote: > Provide more information about __ex_table sorting post link. > > The exception tables and fixup tables use a commonly recurring pattern > in the kernel of storing the address of labels as date in custom ELF > sections, then finding these sections, iterating elements within them, > and possibly revisiting them or modifying the data at these addresses. > > Sorting readonly arrays to minimize runtime penalties is quite clever. > > Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > --- > Documentation/x86/exception-tables.rst | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/Documentation/x86/exception-tables.rst b/Documentation/x86/exception-tables.rst > index ed6d4b0cf62c..15455b2f7ba8 100644 > --- a/Documentation/x86/exception-tables.rst > +++ b/Documentation/x86/exception-tables.rst > @@ -257,6 +257,9 @@ the fault, in our case the actual value is c0199ff5: > the original assembly code: > 3: movl $-14,%eax > and linked in vmlinux : > c0199ff5 <.fixup+10b5> movl $0xfffffff2,%eax > > +If the fixup was able to handle the exception, control flow may be returned > +to the instruction after the one that triggered the fault, ie. local label 2b. > + > The assembly code:: > > > .section __ex_table,"a" > @@ -344,3 +347,9 @@ pointer which points to one of: > it as special. > > More functions can easily be added. > + > +CONFIG_BUILDTIME_TABLE_SORT allows the __ex_table section to be sorted post > +link of the kernel image, via a host utility scripts/sorttable. It will set the > +symbol main_extable_sort_needed to 0, avoiding sorting the __ex_table section > +at boot time. With the exception table sorted, at runtime when an exception > +occurs we can quickly lookup the __ex_table entry via binary search. > It is more than that. It not only saves the boot execution time needed to sort the table, but it is required for early exception handling to work -- and in the x86 code, we use the exception handling *extremely* early (on i386 before paging is even turned on!), long before the kernel would have had any opportunity to sort it. So it is not just performance; it is also a correctness issue. -hpa