* [PATCH v2 4/4] dynamic_debug: add jump label support
[not found] ` <3448491.s2zXTXrSlh@wuerfel>
@ 2016-06-13 20:23 ` Arnd Bergmann
2016-06-13 20:32 ` Jason Baron
0 siblings, 1 reply; 3+ messages in thread
From: Arnd Bergmann @ 2016-06-13 20:23 UTC (permalink / raw)
To: linux-arm-kernel
On Monday, June 13, 2016 6:05:22 PM CEST Arnd Bergmann wrote:
> On Friday, June 10, 2016 11:33:07 AM CEST Jason Baron wrote:
> > On 06/10/2016 05:54 AM, Arnd Bergmann wrote:
> > > On Friday, May 20, 2016 5:16:36 PM CEST Jason Baron wrote:
> > >> Although dynamic debug is often only used for debug builds, sometimes its
> > >> enabled for production builds as well. Minimize its impact by using jump
> > >> labels. This reduces the text section by 7000+ bytes in the kernel image
> > >> below. It does increase data, but this should only be referenced when
> > >> changing the direction of the branches, and hence usually not in cache.
> > >>
> > >> text data bss dec hex filename
> > >> 8194852 4879776 925696 14000324 d5a0c4 vmlinux.pre
> > >> 8187337 4960224 925696 14073257 d6bda9 vmlinux.post
> > >>
> > >> Signed-off-by: Jason Baron <jbaron@akamai.com>
> > >> ---
> > >
> > > This causes problems for some of my randconfig builds, when a dynamic
> > > debug call is used inside of an __exit function:
> > >
> > > `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
> > > `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
> > >
> >
> > I stuck pr_debug() in a few functions marked with __exit, but did not
> > reproduce yet. Can you share your .config and gcc --version.
> >
>
> I found these on ARM randconfig builds e.g. this one
> http://pastebin.com/raw/KjWHxnwU
>
> I also have some other patches applied that could have interacted with your
> change, so if you can't reproduce it easily, let me try it on a plain linux-next
> kernel.
>
> The compiler I use is arm-linux-gnueabi-gcc (GCC) 6.0.0 20160323 (experimental)
Update: on ARM, I have been able to reproduce this with gcc-4.6
and gcc-4.8, so I'm pretty confident that this is independent of the
toolchain. However, I have so far failed to reproduce this on x86.
Looking at the exit_ceph() function, I get these two assembly outputs,
ARM fails with the link error above:
.section .exit.text,"ax",%progbits
.align 2
.syntax unified
.arm
.fpu softvfp
.type exit_ceph, %function
exit_ceph:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp @,
push {fp, ip, lr, pc} @
sub fp, ip, #4 @,,
sub sp, sp, #8 @,,
.syntax divided
@ 13 "/git/arm-soc/arch/arm/include/asm/jump_label.h" 1
1:
nop
.pushsection __jump_table, "aw"
.word 1b, .L341, descriptor.39418+20 @,
.popsection
@ 0 "" 2
.syntax unified
.L342:
ldr r0, .L344 @,
bl unregister_filesystem @
bl ceph_xattr_exit @
bl destroy_caches @
b .L343 @
.L341:
mov r1, #29 @,
ldr r0, .L344+4 @,
bl ceph_file_part @
mov r3, #1072 @ tmp118,
mov r2, #3 @,
stm sp, {r0, r3} @,,
ldr r1, .L344+8 @,
ldr r3, .L344+12 @,
ldr r0, .L344+16 @,
bl __dynamic_pr_debug @
b .L342 @
.L343:
sub sp, fp, #12 @,,
ldm sp, {fp, sp, pc} @
.L345:
.align 2
.L344:
.word .LANCHOR2+224
.word .LC0
.word .LC69
.word .LC1
.word .LANCHOR0+1088
.size exit_ceph, .-exit_ceph
and x86 has no link error with:
.type exit_ceph, @function
exit_ceph:
pushq %rbp #
movq %rsp, %rbp #,
#APP
# 35 "/git/arm-soc/arch/x86/include/asm/jump_label.h" 1
1:.byte 0x0f,0x1f,0x44,0x00,0
.pushsection __jump_table, "aw"
.balign 8
.quad 1b, .L350, descriptor.39765+40 + 0 #,,
.popsection
# 0 "" 2
#NO_APP
.L351:
movq $ceph_fs_type, %rdi #,
call unregister_filesystem #
call ceph_xattr_exit #
call destroy_caches #
popq %rbp #
ret
.L350:
movl $29, %esi #,
movq $.LC0, %rdi #,
call ceph_file_part #
movl $1072, %r9d #,
movq %rax, %r8 #, D.41790
movq $.LC1, %rcx #,
movl $3, %edx #,
movq $.LC85, %rsi #,
movq $descriptor.39765, %rdi #,
call __dynamic_pr_debug #
jmp .L351 #
.size exit_ceph, .-exit_ceph
In both cases, the __jump_table section clearly has a reference to a
discarded section.
Arnd
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 4/4] dynamic_debug: add jump label support
2016-06-13 20:23 ` [PATCH v2 4/4] dynamic_debug: add jump label support Arnd Bergmann
@ 2016-06-13 20:32 ` Jason Baron
2016-07-01 20:45 ` Arnd Bergmann
0 siblings, 1 reply; 3+ messages in thread
From: Jason Baron @ 2016-06-13 20:32 UTC (permalink / raw)
To: linux-arm-kernel
On 06/13/2016 04:23 PM, Arnd Bergmann wrote:
> On Monday, June 13, 2016 6:05:22 PM CEST Arnd Bergmann wrote:
>> On Friday, June 10, 2016 11:33:07 AM CEST Jason Baron wrote:
>>> On 06/10/2016 05:54 AM, Arnd Bergmann wrote:
>>>> On Friday, May 20, 2016 5:16:36 PM CEST Jason Baron wrote:
>>>>> Although dynamic debug is often only used for debug builds, sometimes its
>>>>> enabled for production builds as well. Minimize its impact by using jump
>>>>> labels. This reduces the text section by 7000+ bytes in the kernel image
>>>>> below. It does increase data, but this should only be referenced when
>>>>> changing the direction of the branches, and hence usually not in cache.
>>>>>
>>>>> text data bss dec hex filename
>>>>> 8194852 4879776 925696 14000324 d5a0c4 vmlinux.pre
>>>>> 8187337 4960224 925696 14073257 d6bda9 vmlinux.post
>>>>>
>>>>> Signed-off-by: Jason Baron <jbaron@akamai.com>
>>>>> ---
>>>>
>>>> This causes problems for some of my randconfig builds, when a dynamic
>>>> debug call is used inside of an __exit function:
>>>>
>>>> `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
>>>> `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
>>>>
>>>
>>> I stuck pr_debug() in a few functions marked with __exit, but did not
>>> reproduce yet. Can you share your .config and gcc --version.
>>>
>>
>> I found these on ARM randconfig builds e.g. this one
>> http://pastebin.com/raw/KjWHxnwU
>>
>> I also have some other patches applied that could have interacted with your
>> change, so if you can't reproduce it easily, let me try it on a plain linux-next
>> kernel.
>>
>> The compiler I use is arm-linux-gnueabi-gcc (GCC) 6.0.0 20160323 (experimental)
>
> Update: on ARM, I have been able to reproduce this with gcc-4.6
> and gcc-4.8, so I'm pretty confident that this is independent of the
> toolchain. However, I have so far failed to reproduce this on x86.
>
> Looking at the exit_ceph() function, I get these two assembly outputs,
> ARM fails with the link error above:
>
ok, does this fix things up?
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -44,7 +44,7 @@
#endif
#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
- defined(CONFIG_GENERIC_BUG)
+ defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
#define ARM_EXIT_KEEP(x) x
#define ARM_EXIT_DISCARD(x)
#else
Thanks,
-Jason
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 4/4] dynamic_debug: add jump label support
2016-06-13 20:32 ` Jason Baron
@ 2016-07-01 20:45 ` Arnd Bergmann
0 siblings, 0 replies; 3+ messages in thread
From: Arnd Bergmann @ 2016-07-01 20:45 UTC (permalink / raw)
To: linux-arm-kernel
On Monday, June 13, 2016 4:32:15 PM CEST Jason Baron wrote:
> On 06/13/2016 04:23 PM, Arnd Bergmann wrote:
> > On Monday, June 13, 2016 6:05:22 PM CEST Arnd Bergmann wrote:
> >> On Friday, June 10, 2016 11:33:07 AM CEST Jason Baron wrote:
> >>> On 06/10/2016 05:54 AM, Arnd Bergmann wrote:
> >>>> On Friday, May 20, 2016 5:16:36 PM CEST Jason Baron wrote:
> >>>>> Although dynamic debug is often only used for debug builds, sometimes its
> >>>>> enabled for production builds as well. Minimize its impact by using jump
> >>>>> labels. This reduces the text section by 7000+ bytes in the kernel image
> >>>>> below. It does increase data, but this should only be referenced when
> >>>>> changing the direction of the branches, and hence usually not in cache.
> >>>>>
> >>>>> text data bss dec hex filename
> >>>>> 8194852 4879776 925696 14000324 d5a0c4 vmlinux.pre
> >>>>> 8187337 4960224 925696 14073257 d6bda9 vmlinux.post
> >>>>>
> >>>>> Signed-off-by: Jason Baron <jbaron@akamai.com>
> >>>>> ---
> >>>>
> >>>> This causes problems for some of my randconfig builds, when a dynamic
> >>>> debug call is used inside of an __exit function:
> >>>>
> >>>> `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
> >>>> `.exit.text' referenced in section `__jump_table' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
> >>>>
> >>>
> >>> I stuck pr_debug() in a few functions marked with __exit, but did not
> >>> reproduce yet. Can you share your .config and gcc --version.
> >>>
> >>
> >> I found these on ARM randconfig builds e.g. this one
> >> http://pastebin.com/raw/KjWHxnwU
> >>
> >> I also have some other patches applied that could have interacted with your
> >> change, so if you can't reproduce it easily, let me try it on a plain linux-next
> >> kernel.
> >>
> >> The compiler I use is arm-linux-gnueabi-gcc (GCC) 6.0.0 20160323 (experimental)
> >
> > Update: on ARM, I have been able to reproduce this with gcc-4.6
> > and gcc-4.8, so I'm pretty confident that this is independent of the
> > toolchain. However, I have so far failed to reproduce this on x86.
> >
> > Looking at the exit_ceph() function, I get these two assembly outputs,
> > ARM fails with the link error above:
> >
>
> ok, does this fix things up?
>
> --- a/arch/arm/kernel/vmlinux.lds.S
> +++ b/arch/arm/kernel/vmlinux.lds.S
> @@ -44,7 +44,7 @@
> #endif
>
> #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
> - defined(CONFIG_GENERIC_BUG)
> + defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
> #define ARM_EXIT_KEEP(x) x
> #define ARM_EXIT_DISCARD(x)
> #else
>
Hi Jason,
sorry for missing your email earlier (and your reminder too), the thread
just popped up after Chris Metcalf's reply.
Your patch above probably avoids this, but now I can't reasily test it
since it's not in linux-next any more. If you have a git tree I can
pull into my test setup, I'll try it out again.
Arnd
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-07-01 20:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <cover.1463778029.git.jbaron@akamai.com>
[not found] ` <575ADDB3.7070304@akamai.com>
[not found] ` <3448491.s2zXTXrSlh@wuerfel>
2016-06-13 20:23 ` [PATCH v2 4/4] dynamic_debug: add jump label support Arnd Bergmann
2016-06-13 20:32 ` Jason Baron
2016-07-01 20:45 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox