ARM: 9204/2: module: Add all unwind tables when load module
authorChen Zhongjin <chenzhongjin@huawei.com>
Fri, 20 May 2022 07:49:55 +0000 (08:49 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 20 May 2022 11:34:55 +0000 (12:34 +0100)
commitb6f21d14f1ac1261579b691673a0c823275cbaf8
tree34aa882426300395ac74e343aa4d646cdf280a83
parent8294fec1cab7ae6153525eb68401ed5905921371
ARM: 9204/2: module: Add all unwind tables when load module

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: Chen Zhongjin <chenzhongjin@huawei.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/module.h
arch/arm/include/asm/unwind.h
arch/arm/kernel/module.c