ARM: module: Add ".ref.text" to arm unwind tables
PATCH 1/1 ARM: module: Add ".ref.text" to arm unwind tables
Functions inside kernel modules that use __ref
will end up being placed in .ARM.exidx.ref.text
section by gcc.
Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
unwind: Index not found bf0011e0
This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)
arch/arm/include/asm/module.h +1 -0
@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };
arch/arm/kernel/module.c +4 -0
@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s; else if (strcmp(".text", secname) == 0)
@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }for (i =0 ; i <ARM_SEC_MAX ; i++)
Signature · 8 lines
1.8.2.1 -- Thanks and regards, Vignesh Radhakrishnan QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation.
Quoted 10 lines · Vignesh Radhakrishnan
Functions inside kernel modules that use
__refwill end up being placed in .ARM.exidx.ref.text section by gcc.Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
Quoted 9 lines
unwind: Index not found
bf0011e0This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
With this patch, I go from
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #28 Hardware name: ARM-Versatile PB [<c001a590>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14) [<c0017b84>] (show_stack) from [<c0022370>] (warn_slowpath_common+0x78/0xb0) [<c0022370>] (warn_slowpath_common) from [<c0022444>] (warn_slowpath_null+0x1c/0x24) [<c0022444>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c [test]) unwind: Index not found bf000048 ---[ end trace 3e24f8edd90f3b27 ]---
to
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #30 Hardware name: ARM-Versatile PB [<c001a5d0>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14) [<c0017b84>] (show_stack) from [<c0022770>] (warn_slowpath_common+0x78/0xb0) [<c0022770>] (warn_slowpath_common) from [<c0022844>] (warn_slowpath_null+0x1c/0x24) [<c0022844>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c [test]) [<bf000048>] (that_function [test]) from [<bf002010>] (awesome_module+0x10/0x1c [test]) [<bf002010>] (awesome_module [test]) from [<c0009710>] (do_one_initcall+0x80/0x1dc) [<c0009710>] (do_one_initcall) from [<c02d14e0>] (do_init_module+0x58/0x1a8) [<c02d14e0>] (do_init_module) from [<c0063940>] (load_module+0x170c/0x1c38) [<c0063940>] (load_module) from [<c0063f38>] (SyS_init_module+0xcc/0x124) [<c0063f38>] (SyS_init_module) from [<c0014900>] (ret_fast_syscall+0x0/0x30) ---[ end trace 554c9ff461eb2505 ]---
Quoted 41 lines
Signed-off-by Vignesh Radhakrishnan <[email protected]>--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)arch/arm/include/asm/module.h +1
-0@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };arch/arm/kernel/module.c +4
-0@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s; else if (strcmp(".text", secname) == 0)@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }for (i =0 ; i <ARM_SEC_MAX ; i++)
Forgot to add Maintainers. Adding them now.
Quoted 111 lines · Vignesh Radhakrishnan
Quoted 10 lines
Functions inside kernel modules that use
__refwill end up being placed in .ARM.exidx.ref.text section by gcc.Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
Quoted 9 lines
unwind: Index not found
bf0011e0This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
With this patch, I go from
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #28 Hardware name: ARM-Versatile PB [<c001a590>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022370>] (warn_slowpath_common+0x78/0xb0)
[<c0022370>] (warn_slowpath_common) from [<c0022444>] (warn_slowpath_null+0x1c/0x24)
[<c0022444>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
unwind: Index not foundbf000048---[ end trace 3e24f8edd90f3b27 ]---to
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #30 Hardware name: ARM-Versatile PB [<c001a5d0>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022770>] (warn_slowpath_common+0x78/0xb0)
[<c0022770>] (warn_slowpath_common) from [<c0022844>] (warn_slowpath_null+0x1c/0x24)
[<c0022844>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
[<bf000048>] (that_function[test]) from [<bf002010>] (awesome_module+0x10/0x1c[test])
[<bf002010>] (awesome_module[test]) from [<c0009710>] (do_one_initcall+0x80/0x1dc)
[<c0009710>] (do_one_initcall) from [<c02d14e0>] (do_init_module+0x58/0x1a8)
[<c02d14e0>] (do_init_module) from [<c0063940>] (load_module+0x170c/0x1c38)
[<c0063940>] (load_module) from [<c0063f38>] (SyS_init_module+0xcc/0x124) [<c0063f38>] (SyS_init_module) from [<c0014900>] (ret_fast_syscall+0x0/0x30)---[ end trace 554c9ff461eb2505 ]---Tested-by Laura Abbott <[email protected]>Quoted 42 lines
Signed-off-by Vignesh Radhakrishnan <[email protected]>--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)arch/arm/include/asm/module.h +1
-0@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };arch/arm/kernel/module.c +2
-0@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s;else if (
strcmp(".text", secname)== 0)arch/arm/kernel/module.c +2
-0@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }
Quoted 4 lines
Quoted 2 lines
for (i = 0; i <
ARM_SEC_MAX; i++)
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation. again
Gentle reminder for review comments.
Quoted 132 lines
Forgot to add Maintainers. Adding them now.
Quoted 114 lines · Vignesh Radhakrishnan
Quoted 10 lines
Functions inside kernel modules that use
__refwill end up being placed in .ARM.exidx.ref.text section by gcc.Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
Quoted 9 lines
unwind: Index not found
bf0011e0This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
With this patch, I go from
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #28 Hardware name: ARM-Versatile PB [<c001a590>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022370>] (warn_slowpath_common+0x78/0xb0)
[<c0022370>] (warn_slowpath_common) from [<c0022444>] (warn_slowpath_null+0x1c/0x24)
[<c0022444>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
unwind: Index not foundbf000048---[ end trace 3e24f8edd90f3b27 ]---to
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #30 Hardware name: ARM-Versatile PB [<c001a5d0>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022770>] (warn_slowpath_common+0x78/0xb0)
[<c0022770>] (warn_slowpath_common) from [<c0022844>] (warn_slowpath_null+0x1c/0x24)
[<c0022844>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
[<bf000048>] (that_function[test]) from [<bf002010>] (awesome_module+0x10/0x1c[test]) [<bf002010>] (awesome_module[test]) from [<c0009710>] (do_one_initcall+0x80/0x1dc)
[<c0009710>] (do_one_initcall) from [<c02d14e0>] (do_init_module+0x58/0x1a8)
[<c02d14e0>] (do_init_module) from [<c0063940>] (load_module+0x170c/0x1c38)
[<c0063940>] (load_module) from [<c0063f38>] (SyS_init_module+0xcc/0x124)
[<c0063f38>] (SyS_init_module) from [<c0014900>] (ret_fast_syscall+0x0/0x30)---[ end trace 554c9ff461eb2505 ]---Tested-by Laura Abbott <[email protected]>Quoted 42 lines
Signed-off-by Vignesh Radhakrishnan <[email protected]>--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)arch/arm/include/asm/module.h +1
-0@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };arch/arm/kernel/module.c +2
-0@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s;else if (
strcmp(".text", secname)== 0)arch/arm/kernel/module.c +2
-0@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }Quoted 4 lines
Quoted 2 lines
for (i = 0; i <
ARM_SEC_MAX; i++)QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation. again
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Quoted 1 line · vigneshr at codeaurora.org
Gentle reminder for review comments.
I don't see anything wrong with the patch... but it needs to find its way into the patch system to be applied, so it doesn't get forgotten. Please add it there along with Laura's attributation. Thanks.
Quoted 134 lines
Quoted 132 lines
Forgot to add Maintainers. Adding them now.
Quoted 114 lines · Vignesh Radhakrishnan
Quoted 10 lines
Functions inside kernel modules that use
__refwill end up being placed in .ARM.exidx.ref.text section by gcc.Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
Quoted 9 lines
unwind: Index not found
bf0011e0This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
With this patch, I go from
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #28 Hardware name: ARM-Versatile PB [<c001a590>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022370>] (warn_slowpath_common+0x78/0xb0)
[<c0022370>] (warn_slowpath_common) from [<c0022444>] (warn_slowpath_null+0x1c/0x24)
[<c0022444>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
unwind: Index not foundbf000048---[ end trace 3e24f8edd90f3b27 ]---to
------------[ cut here ]------------ WARNING: CPU: 0 PID: 63 at drivers/misc/test.c:12 that_function+0x10/0x2c [test]() Modules linked in: test(P+) CPU: 0 PID: 63 Comm: insmod Tainted: P 4.1.0-rc2+ #30 Hardware name: ARM-Versatile PB [<c001a5d0>] (unwind_backtrace) from [<c0017b84>] (show_stack+0x10/0x14)[<
c0017b84>] (show_stack) from [<c0022770>] (warn_slowpath_common+0x78/0xb0)
[<c0022770>] (warn_slowpath_common) from [<c0022844>] (warn_slowpath_null+0x1c/0x24)
[<c0022844>] (warn_slowpath_null) from [<bf000048>] (that_function+0x10/0x2c[test])
[<bf000048>] (that_function[test]) from [<bf002010>] (awesome_module+0x10/0x1c[test]) [<bf002010>] (awesome_module[test]) from [<c0009710>] (do_one_initcall+0x80/0x1dc)
[<c0009710>] (do_one_initcall) from [<c02d14e0>] (do_init_module+0x58/0x1a8)
[<c02d14e0>] (do_init_module) from [<c0063940>] (load_module+0x170c/0x1c38)
[<c0063940>] (load_module) from [<c0063f38>] (SyS_init_module+0xcc/0x124)
[<c0063f38>] (SyS_init_module) from [<c0014900>] (ret_fast_syscall+0x0/0x30)---[ end trace 554c9ff461eb2505 ]---Tested-by Laura Abbott <[email protected]>Quoted 42 lines
Signed-off-by Vignesh Radhakrishnan <[email protected]>--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)arch/arm/include/asm/module.h +1
-0@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };arch/arm/kernel/module.c +2
-0@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s;else if (
strcmp(".text", secname)== 0)arch/arm/kernel/module.c +2
-0@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }Quoted 4 lines
Quoted 2 lines
for (i = 0; i <
ARM_SEC_MAX; i++)QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation. again
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Signature · 2 lines
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up according to speedtest.net.
PATCH 1/1 ARM: module: Add ".ref.text" to arm unwind tables
Functions inside kernel modules that use __ref
will end up being placed in .ARM.exidx.ref.text
section by gcc.
Currently we don't consider adding these functions to arm unwind tables.
Hence, if we turn slub debug on by default we end up with the messages of this sort:
unwind: Index not found bf0011e0
This is because slub debug saves stack trace of allocation's and free's. Therefore, we end up seeing a flood of these messages in dmesg since its not able to locate these functions.
Fix this by adding .ref.text section to arm unwind tables.
--- arch/arm/include/asm/module.h | 1 + arch/arm/kernel/module.c | 4 ++++ 2 files changed, 5 insertions(+)
arch/arm/include/asm/module.h +1 -0
@@ -14,6 +14,7 @@ enum {ARM_SEC_DEVEXIT ,ARM_SEC_HOT ,ARM_SEC_UNLIKELY , +ARM_SEC_REF , ARM_SEC_MAX, };
arch/arm/kernel/module.c +4 -0
@@ -308,6 +308,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].unw_sec = s; else if (strcmp(".ARM.exidx.text.hot", secname) == 0) maps[ARM_SEC_HOT ].unw_sec = s; + else if (strcmp(".ARM.exidx.ref.text", secname) == 0) + maps[ARM_SEC_REF ].unw_sec = s; else if (strcmp(".init.text", secname) == 0) maps[ARM_SEC_INIT ].txt_sec = s; else if (strcmp(".text", secname) == 0)
@@ -318,6 +320,8 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, maps[ARM_SEC_UNLIKELY ].txt_sec = s; else if (strcmp(".text.hot", secname) == 0) maps[ARM_SEC_HOT ].txt_sec = s; + else if (strcmp(".ref.text", secname) == 0) + maps[ARM_SEC_REF ].txt_sec = s; }for (i =0 ; i <ARM_SEC_MAX ; i++)
Signature · 8 lines
1.8.2.1 -- Thanks and regards, Vignesh Radhakrishnan QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation.