• Chen Zhongjin's avatar
    ARM: 9204/2: module: Add all unwind tables when load module · b6f21d14
    Chen Zhongjin authored
    For EABI stack unwinding, when loading .ko module
    the EXIDX sections will be added to a unwind_table list.
    
    However not all EXIDX sections are added because EXIDX
    sections are searched by hardcoded section names.
    
    For functions in other sections such as .ref.text
    or .kprobes.text, gcc generates seprated EXIDX sections
    (such as .ARM.exidx.ref.text or .ARM.exidx.kprobes.text).
    
    These extra EXIDX sections are not loaded, so when unwinding
    functions in these sections, we will failed with:
    
    	unwind: Index not found xxx
    
    To fix that, I refactor the code for searching and adding
    EXIDX sections:
    
    - Check section type to search EXIDX tables (0x70000001)
    instead of strcmp() the hardcoded names. Then find the
    corresponding text sections by their section names.
    
    - Add a unwind_table list in module->arch to save their own
    unwind_table instead of the fixed-lenth array.
    
    - Save .ARM.exidx.init.text section ptr, because it should
    be cleaned after module init.
    
    Now all EXIDX sections of .ko can be added correctly.
    Signed-off-by: default avatarChen Zhongjin <chenzhongjin@huawei.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
    b6f21d14
unwind.h 1.17 KB