On 05/10/18 10:07, Arnd Bergmann wrote: > On Fri, Oct 5, 2018 at 10:52 AM David Laight <David.Laight@xxxxxxxxxx> wrote: >> >> From: Arnd Bergmann >>> Sent: 05 October 2018 09:33 >>> >>> Building any configuration with 'make W=1' produces a warning: >>> >>> kernel/bounds.c:16:6: warnign: no previous prototype for 'foo' [-Wmissing-prototypes] >>> >>> When also passing -Werror, this prevents us from building any >>> other files. Nobody ever calls the function, but we can't make >>> it 'static' either since we want the compiler output. >>> >>> Calling it 'main' instead however avoids the warning, because gcc >>> does not insist on having a declaration for main. >> >> Ugg. >> main() might be special in other ways too. >> It wouldn't surprise me if some linkers don't do special stuff for it. I worried about this but didn't think it would be too much of an issue. But perhaps we should check... <compile bounds.s in both configurations> as bounds.s.foo and bounds.s.main: diff -Nurp bounds.s.* --- bounds.s.foo 2018-10-05 10:20:53.269941404 +0100 +++ bounds.s.main 2018-10-05 10:20:31.375891260 +0100 @@ -108,11 +108,12 @@ .global _mcount #NO_APP + .section .text.startup,"ax",@progbits .align 2 .p2align 3,,7 - .global foo - .type foo, %function -foo: + .global main + .type main, %function +main: stp x29, x30, [sp, -16]! //,,, add x29, sp, 0 //,, // /home/linuxembedded/iob/renesas/vsp1/sources/linux/kernel/bounds.c:17: { @@ -139,10 +140,11 @@ foo: .ascii "->SPINLOCK_SIZE 56 sizeof(spinlock_t)" // // 0 "" 2 -// /home/linuxembedded/iob/renesas/vsp1/sources/linux/kernel/bounds.c:26: } +// /home/linuxembedded/iob/renesas/vsp1/sources/linux/kernel/bounds.c:28: } #NO_APP + mov w0, 0 //, ldp x29, x30, [sp], 16 //,,, ret - .size foo, .-foo + .size main, .-main .ident "GCC: (Ubuntu/Linaro 7.3.0-16ubuntu3) 7.3.0" .section .note.GNU-stack,"",@progbits compiled with aarch64-linux-gnu-gcc, and with no debug enabled. Other than the entry point rename (and section name) and the return value being added, I can't see anything problematic here. And as far as I know - this file gets processed after to extract definitions which should be independent. This file is not executed or further compiled as far as I am aware. -- Kieran >> >> What is wrong with just putting and extra "void foo(void);" before >> the function? > > Greg objected to that on the basis that we don't want declarations > in .c files -- they should be in a shared header: > > https://lkml.org/lkml/2018/9/21/735 > > I don't see what could go wrong here with calling it main(), after > all we are just interested in the assembler output, not even > creating an object file. > > Arnd >