Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1590407 > unrolled thread
| Started by | Josh Poimboeuf <jpoimboe@redhat.com> |
|---|---|
| First post | 2017-03-01 16:30 +0100 |
| Last post | 2017-03-01 22:50 +0100 |
| Articles | 6 — 4 participants |
Back to article view | Back to linux.kernel
[PATCH] objtool, module: discard __unreachable section for modules Josh Poimboeuf <jpoimboe@redhat.com> - 2017-03-01 16:30 +0100
Re: [PATCH] objtool, module: discard __unreachable section for modules hpa@zytor.com - 2017-03-01 17:50 +0100
Re: [PATCH] objtool, module: discard __unreachable section for modules Linus Torvalds <torvalds@linux-foundation.org> - 2017-03-01 18:10 +0100
Re: [PATCH] objtool, module: discard __unreachable section for modules hpa@zytor.com - 2017-03-01 18:50 +0100
[PATCH v2] objtool, module: discard objtool annotation sections for modules Josh Poimboeuf <jpoimboe@redhat.com> - 2017-03-01 19:30 +0100
[tip:core/urgent] objtool, modules: Discard objtool annotation sections for modules tip-bot for Josh Poimboeuf <tipbot@zytor.com> - 2017-03-01 22:50 +0100
| From | Josh Poimboeuf <jpoimboe@redhat.com> |
|---|---|
| Date | 2017-03-01 16:30 +0100 |
| Subject | [PATCH] objtool, module: discard __unreachable section for modules |
| Message-ID | <tgemu-4Vt-15@gated-at.bofh.it> |
The __unreachable section is only used at compile time. It's discarded
for vmlinux but it should also be discarded for modules.
Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other dead ends")
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
---
scripts/module-common.lds | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/scripts/module-common.lds b/scripts/module-common.lds
index 73a2c7d..936a3c6 100644
--- a/scripts/module-common.lds
+++ b/scripts/module-common.lds
@@ -4,7 +4,10 @@
* combine them automatically.
*/
SECTIONS {
- /DISCARD/ : { *(.discard) }
+ /DISCARD/ : {
+ *(.discard)
+ *(__unreachable)
+ }
__ksymtab 0 : { *(SORT(___ksymtab+*)) }
__ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
--
2.7.4
[toc] | [next] | [standalone]
| From | hpa@zytor.com |
|---|---|
| Date | 2017-03-01 17:50 +0100 |
| Message-ID | <tgfBT-5HN-3@gated-at.bofh.it> |
| In reply to | #1590407 |
On March 1, 2017 7:20:03 AM PST, Josh Poimboeuf <jpoimboe@redhat.com> wrote:
>The __unreachable section is only used at compile time. It's discarded
>for vmlinux but it should also be discarded for modules.
>
>Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other
>dead ends")
>Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
>---
> scripts/module-common.lds | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
>diff --git a/scripts/module-common.lds b/scripts/module-common.lds
>index 73a2c7d..936a3c6 100644
>--- a/scripts/module-common.lds
>+++ b/scripts/module-common.lds
>@@ -4,7 +4,10 @@
> * combine them automatically.
> */
> SECTIONS {
>- /DISCARD/ : { *(.discard) }
>+ /DISCARD/ : {
>+ *(.discard)
>+ *(__unreachable)
>+ }
>
> __ksymtab 0 : { *(SORT(___ksymtab+*)) }
> __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
I would like to see a name like, say, ".annot.unreachable", since is odds are pretty high we are going to need more annotations in the future.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
[toc] | [prev] | [next] | [standalone]
| From | Linus Torvalds <torvalds@linux-foundation.org> |
|---|---|
| Date | 2017-03-01 18:10 +0100 |
| Message-ID | <tgfVf-65H-5@gated-at.bofh.it> |
| In reply to | #1590501 |
On Wed, Mar 1, 2017 at 8:44 AM, <hpa@zytor.com> wrote:
>
> I would like to see a name like, say, ".annot.unreachable", since is odds are pretty high we are going to need more annotations in the future.
Why not just make it ".discard.unreachable", and then make the discard
pattern be ".discard*".
We already have .discard.text for some trace hackery, so it follows a pattern.
And that's what we do for things like .rodata.* etc.
In fact, we already have a pattern for '.discard.*' in the main
vmlinux.lds.h file exactly for the .discard.text case (but not for
modules, it looks like).
Linus
[toc] | [prev] | [next] | [standalone]
| From | hpa@zytor.com |
|---|---|
| Date | 2017-03-01 18:50 +0100 |
| Message-ID | <tggxX-6ns-5@gated-at.bofh.it> |
| In reply to | #1590517 |
On March 1, 2017 9:01:54 AM PST, Linus Torvalds <torvalds@linux-foundation.org> wrote: >On Wed, Mar 1, 2017 at 8:44 AM, <hpa@zytor.com> wrote: >> >> I would like to see a name like, say, ".annot.unreachable", since is >odds are pretty high we are going to need more annotations in the >future. > >Why not just make it ".discard.unreachable", and then make the discard >pattern be ".discard*". > >We already have .discard.text for some trace hackery, so it follows a >pattern. > >And that's what we do for things like .rodata.* etc. > >In fact, we already have a pattern for '.discard.*' in the main >vmlinux.lds.h file exactly for the .discard.text case (but not for >modules, it looks like). > > Linus I was assuming it would be used for more than just discarding. -- Sent from my Android device with K-9 Mail. Please excuse my brevity.
[toc] | [prev] | [next] | [standalone]
| From | Josh Poimboeuf <jpoimboe@redhat.com> |
|---|---|
| Date | 2017-03-01 19:30 +0100 |
| Subject | [PATCH v2] objtool, module: discard objtool annotation sections for modules |
| Message-ID | <tghaF-6U3-3@gated-at.bofh.it> |
| In reply to | #1590517 |
The '__unreachable' and '__func_stack_frame_non_standard' sections are
only used at compile time. They're discarded for vmlinux but they
should also be discarded for modules.
Since this is a recurring pattern, prefix the section names with
".discard.". It's a nice convention and vmlinux.lds.h already discards
such sections.
Also remove the 'a' (allocatable) flag from the __unreachable section
since it doesn't make sense for a discarded section.
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other dead ends")
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
---
arch/x86/kernel/vmlinux.lds.S | 2 --
include/linux/compiler-gcc.h | 2 +-
include/linux/frame.h | 2 +-
scripts/mod/modpost.c | 1 +
scripts/module-common.lds | 5 ++++-
tools/objtool/builtin-check.c | 7 ++++---
6 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index ad0118f..c74ae9c 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -345,8 +345,6 @@ SECTIONS
DISCARDS
/DISCARD/ : {
*(.eh_frame)
- *(__func_stack_frame_non_standard)
- *(__unreachable)
}
}
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index b6bb901..0efef9c 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -200,7 +200,7 @@
#ifdef CONFIG_STACK_VALIDATION
#define annotate_unreachable() ({ \
asm("%c0:\t\n" \
- ".pushsection __unreachable, \"a\"\t\n" \
+ ".pushsection .discard.unreachable\t\n" \
".long %c0b - .\t\n" \
".popsection\t\n" : : "i" (__LINE__)); \
})
diff --git a/include/linux/frame.h b/include/linux/frame.h
index e6baaba..d772c61 100644
--- a/include/linux/frame.h
+++ b/include/linux/frame.h
@@ -11,7 +11,7 @@
* For more information, see tools/objtool/Documentation/stack-validation.txt.
*/
#define STACK_FRAME_NON_STANDARD(func) \
- static void __used __section(__func_stack_frame_non_standard) \
+ static void __used __section(.discard.func_stack_frame_non_standard) \
*__func_stack_frame_non_standard_##func = func
#else /* !CONFIG_STACK_VALIDATION */
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 4dedd0d..30d752a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -854,6 +854,7 @@ static const char *const section_white_list[] =
".cmem*", /* EZchip */
".fmt_slot*", /* EZchip */
".gnu.lto*",
+ ".discard.*",
NULL
};
diff --git a/scripts/module-common.lds b/scripts/module-common.lds
index 73a2c7d..cf7e52e 100644
--- a/scripts/module-common.lds
+++ b/scripts/module-common.lds
@@ -4,7 +4,10 @@
* combine them automatically.
*/
SECTIONS {
- /DISCARD/ : { *(.discard) }
+ /DISCARD/ : {
+ *(.discard)
+ *(.discard.*)
+ }
__ksymtab 0 : { *(SORT(___ksymtab+*)) }
__ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
index 5fc52ee..bd12eb1 100644
--- a/tools/objtool/builtin-check.c
+++ b/tools/objtool/builtin-check.c
@@ -339,13 +339,14 @@ static int add_dead_ends(struct objtool_file *file)
struct instruction *insn;
bool found;
- sec = find_section_by_name(file->elf, ".rela__unreachable");
+ sec = find_section_by_name(file->elf, ".rela.discard.unreachable");
if (!sec)
return 0;
list_for_each_entry(rela, &sec->rela_list, list) {
if (rela->sym->type != STT_SECTION) {
- WARN("unexpected relocation symbol type in .rela__unreachable");
+ WARN("unexpected relocation symbol type in %s",
+ sec->name);
return -1;
}
insn = find_insn(file, rela->sym->sec, rela->addend);
@@ -1272,7 +1273,7 @@ int cmd_check(int argc, const char **argv)
INIT_LIST_HEAD(&file.insn_list);
hash_init(file.insn_hash);
- file.whitelist = find_section_by_name(file.elf, "__func_stack_frame_non_standard");
+ file.whitelist = find_section_by_name(file.elf, ".discard.func_stack_frame_non_standard");
file.rodata = find_section_by_name(file.elf, ".rodata");
file.ignore_unreachables = false;
file.c_file = find_section_by_name(file.elf, ".comment");
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Josh Poimboeuf <tipbot@zytor.com> |
|---|---|
| Date | 2017-03-01 22:50 +0100 |
| Subject | [tip:core/urgent] objtool, modules: Discard objtool annotation sections for modules |
| Message-ID | <tgkie-DA-3@gated-at.bofh.it> |
| In reply to | #1590550 |
Commit-ID: e390f9a9689a42f477a6073e2e7df530a4c1b740
Gitweb: http://git.kernel.org/tip/e390f9a9689a42f477a6073e2e7df530a4c1b740
Author: Josh Poimboeuf <jpoimboe@redhat.com>
AuthorDate: Wed, 1 Mar 2017 12:04:44 -0600
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 1 Mar 2017 20:32:25 +0100
objtool, modules: Discard objtool annotation sections for modules
The '__unreachable' and '__func_stack_frame_non_standard' sections are
only used at compile time. They're discarded for vmlinux but they
should also be discarded for modules.
Since this is a recurring pattern, prefix the section names with
".discard.". It's a nice convention and vmlinux.lds.h already discards
such sections.
Also remove the 'a' (allocatable) flag from the __unreachable section
since it doesn't make sense for a discarded section.
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jessica Yu <jeyu@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Fixes: d1091c7fa3d5 ("objtool: Improve detection of BUG() and other dead ends")
Link: http://lkml.kernel.org/r/20170301180444.lhd53c5tibc4ns77@treble
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/kernel/vmlinux.lds.S | 2 --
include/linux/compiler-gcc.h | 2 +-
include/linux/frame.h | 2 +-
scripts/mod/modpost.c | 1 +
scripts/module-common.lds | 5 ++++-
tools/objtool/builtin-check.c | 6 +++---
6 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index ad0118f..c74ae9c 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -345,8 +345,6 @@ SECTIONS
DISCARDS
/DISCARD/ : {
*(.eh_frame)
- *(__func_stack_frame_non_standard)
- *(__unreachable)
}
}
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index b6bb901..0efef9c 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -200,7 +200,7 @@
#ifdef CONFIG_STACK_VALIDATION
#define annotate_unreachable() ({ \
asm("%c0:\t\n" \
- ".pushsection __unreachable, \"a\"\t\n" \
+ ".pushsection .discard.unreachable\t\n" \
".long %c0b - .\t\n" \
".popsection\t\n" : : "i" (__LINE__)); \
})
diff --git a/include/linux/frame.h b/include/linux/frame.h
index e6baaba..d772c61 100644
--- a/include/linux/frame.h
+++ b/include/linux/frame.h
@@ -11,7 +11,7 @@
* For more information, see tools/objtool/Documentation/stack-validation.txt.
*/
#define STACK_FRAME_NON_STANDARD(func) \
- static void __used __section(__func_stack_frame_non_standard) \
+ static void __used __section(.discard.func_stack_frame_non_standard) \
*__func_stack_frame_non_standard_##func = func
#else /* !CONFIG_STACK_VALIDATION */
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 4dedd0d..30d752a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -854,6 +854,7 @@ static const char *const section_white_list[] =
".cmem*", /* EZchip */
".fmt_slot*", /* EZchip */
".gnu.lto*",
+ ".discard.*",
NULL
};
diff --git a/scripts/module-common.lds b/scripts/module-common.lds
index 73a2c7d..cf7e52e 100644
--- a/scripts/module-common.lds
+++ b/scripts/module-common.lds
@@ -4,7 +4,10 @@
* combine them automatically.
*/
SECTIONS {
- /DISCARD/ : { *(.discard) }
+ /DISCARD/ : {
+ *(.discard)
+ *(.discard.*)
+ }
__ksymtab 0 : { *(SORT(___ksymtab+*)) }
__ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
index 5fc52ee..4cfdbb5 100644
--- a/tools/objtool/builtin-check.c
+++ b/tools/objtool/builtin-check.c
@@ -339,13 +339,13 @@ static int add_dead_ends(struct objtool_file *file)
struct instruction *insn;
bool found;
- sec = find_section_by_name(file->elf, ".rela__unreachable");
+ sec = find_section_by_name(file->elf, ".rela.discard.unreachable");
if (!sec)
return 0;
list_for_each_entry(rela, &sec->rela_list, list) {
if (rela->sym->type != STT_SECTION) {
- WARN("unexpected relocation symbol type in .rela__unreachable");
+ WARN("unexpected relocation symbol type in %s", sec->name);
return -1;
}
insn = find_insn(file, rela->sym->sec, rela->addend);
@@ -1272,7 +1272,7 @@ int cmd_check(int argc, const char **argv)
INIT_LIST_HEAD(&file.insn_list);
hash_init(file.insn_hash);
- file.whitelist = find_section_by_name(file.elf, "__func_stack_frame_non_standard");
+ file.whitelist = find_section_by_name(file.elf, ".discard.func_stack_frame_non_standard");
file.rodata = find_section_by_name(file.elf, ".rodata");
file.ignore_unreachables = false;
file.c_file = find_section_by_name(file.elf, ".comment");
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web