ARM:asm:io.h use static inline
PATCH 1/1 ARM:asm:io.h use static inline
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
--- arch/arm/include/asm/io.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/arm/include/asm/io.h +6 -6
@@ -75,7 +75,7 @@ static inline phys_addr_t virt_to_phys(void * vaddr)#define __arch_putw (v,a) (*(volatile unsigned short *)(a) = (v))#define __arch_putl (v,a) (*(volatile unsigned int *)(a) = (v)) -extern inline void __raw_writesb (unsigned long addr,const void *data, +static inline void __raw_writesb (unsigned long addr,const void *data,int bytelen) {uint8_t *buf = (uint8_t *)data;
@@ -83,7 +83,7 @@ extern inline void __raw_writesb(unsigned long addr, const void *data,__arch_putb (*buf++, addr); } -extern inline void __raw_writesw (unsigned long addr,const void *data, +static inline void __raw_writesw (unsigned long addr,const void *data,int wordlen) {uint16_t *buf = (uint16_t *)data;
@@ -91,7 +91,7 @@ extern inline void __raw_writesw(unsigned long addr, const void *data,__arch_putw (*buf++, addr); } -extern inline void __raw_writesl (unsigned long addr,const void *data, +static inline void __raw_writesl (unsigned long addr,const void *data,int longlen) {uint32_t *buf = (uint32_t *)data;
@@ -99,21 +99,21 @@ extern inline void __raw_writesl(unsigned long addr, const void *data,__arch_putl (*buf++, addr); } -extern inline void __raw_readsb (unsigned long addr,void *data,int bytelen) +static inline void __raw_readsb (unsigned long addr,void *data,int bytelen) {uint8_t *buf = (uint8_t *)data;while (bytelen--) *buf++ =__arch_getb (addr); } -extern inline void __raw_readsw (unsigned long addr,void *data,int wordlen) +static inline void __raw_readsw (unsigned long addr,void *data,int wordlen) {uint16_t *buf = (uint16_t *)data;while (wordlen--) *buf++ =__arch_getw (addr); } -extern inline void __raw_readsl (unsigned long addr,void *data,int longlen) +static inline void __raw_readsl (unsigned long addr,void *data,int longlen) {uint32_t *buf = (uint32_t *)data;while (longlen--)
Signature · 1 line
1.8.3.2
PATCH 1/1 ARM:asm:io.h use static inline
Hi Jeroen,
Quoted 9 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>---
Ok, so the obvious question: what makes you decide to switch to 'static inline' rather than provide the extern versions that 'extern static' calls for?
(see e.g. http://elinux.org/Extern_Vs_Static_Inline for an example discussion on 'static inline' vs 'extern inline'. Note: this link is not intended as an expression of my stance on the issue, as I don't have any.)
Amicalement,
Signature · 1 line
Albert.
PATCH 1/1 ARM:asm:io.h use static inline
Hello Albert,
Quoted 11 lines · Albert ARIBAUD
Hi Jeroen,
Quoted 6 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
Quoted 7 lines
Quoted 3 lines
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>---
Ok, so the obvious question: what makes you decide to switch to 'static inline' rather than provide the extern versions that 'extern static' calls for?
Assuming your question is, why didn't you just add the prototypes instead?
Well if we wanted to be brave gnu99 citizens we should provide the prototypes, the extern inline version and a separated definition in case the compiler fails / is not in the mood to inline the function. This quite fragile / some housekeeping. Furthermore it is gnu specific and likely fails with gcc -std=c99 as well.
Making them static inline there is always a single definition and it is up to the compiler to either inline it or make it a static function by it self. Since we were already relying on the compiler to inline it (at least I am unaware that there are non inline version around), this boils down to the same thing, but without warnings.
And... I can likely drop this one as well[1], although I haven't checked yet. linux does the same btw for __LINUX_ARM_ARCH__ >= 6.
I can check binary size if that something you wonder about...
Regards,
Jeroen
[1] https://github.com/jhofstee/u-boot/commit/5cd261fecc5397bf5abef82f6a781d8b04992654
PATCH 1/1 ARM:asm:io.h use static inline
Hi Jeroen,
(sorry for the near-duplicate, and see question at end)
Quoted 18 lines · Jeroen Hofstee
Hello Albert,
Quoted 15 lines · Albert ARIBAUD
Hi Jeroen,
Quoted 9 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>---
Quoted 5 lines
Quoted 3 lines
Ok, so the obvious question: what makes you decide to switch to 'static inline' rather than provide the extern versions that 'extern static' calls for?
Assuming your question is, why didn't you just add the prototypes instead?
It was more along the lines of "were you aware that you had a choice there?"
Quoted 12 lines
Well if we wanted to be brave gnu99 citizens we should provide the prototypes, the extern inline version and a separated definition in case the compiler fails / is not in the mood to inline the function. This quite fragile / some housekeeping. Furthermore it is gnu specific and likely fails with gcc -std=c99 as well.
Making them static inline there is always a single definition and it is up to the compiler to either inline it or make it a static function by it self. Since we were already relying on the compiler to inline it (at least I am unaware that there are non inline version around), this boils down to the same thing, but without warnings.
Quoted 4 lines
And... I can likely drop this one as well[1], although I haven't checked yet. linux does the same btw for
__LINUX_ARM_ARCH__>= 6.I can check binary size if that something you wonder about...
As I said, I have no stance on whether 'static inline' or 'extern inline' was better / more appropriate / other (please specify). I just wanted to make sure that you had considered both possibilities before choosing one of them. I am now assured that you have, so all is fine.
Quoted 4 lines
Regards,
Jeroen[1] https://github.com/jhofstee/u-boot/commit/5cd261fecc5397bf5abef82f6a781d8b04992654
Which board do you get warnings for?
Amicalement,
Signature · 1 line
Albert.
PATCH 1/1 ARM:asm:io.h use static inline
Hello Albert,
Quoted 24 lines · Albert ARIBAUD
Hi Jeroen,
(sorry for the near-duplicate, and see question at end)
Quoted 17 lines · Jeroen Hofstee
Hello Albert,
Quoted 14 lines · Albert ARIBAUD
Hi Jeroen,
Quoted 9 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>---
Quoted 6 lines
Quoted 4 lines
Quoted 3 lines
Ok, so the obvious question: what makes you decide to switch to 'static inline' rather than provide the extern versions that 'extern static' calls for?
Assuming your question is, why didn't you just add the prototypes instead?
It was more along the lines of "were you aware that you had a choice there?"
yes I was aware of that.
Quoted 12 lines
Quoted 12 lines
Well if we wanted to be brave gnu99 citizens we should provide the prototypes, the extern inline version and a separated definition in case the compiler fails / is not in the mood to inline the function. This quite fragile / some housekeeping. Furthermore it is gnu specific and likely fails with gcc -std=c99 as well.
Making them static inline there is always a single definition and it is up to the compiler to either inline it or make it a static function by it self. Since we were already relying on the compiler to inline it (at least I am unaware that there are non inline version around), this boils down to the same thing, but without warnings.
Quoted 8 lines
Quoted 4 lines
And... I can likely drop this one as well[1], although I haven't checked yet. linux does the same btw for
__LINUX_ARM_ARCH__>= 6.I can check binary size if that something you wonder about...
As I said, I have no stance on whether 'static inline' or 'extern inline' was better / more appropriate / other (please specify). I just wanted to make sure that you had considered both possibilities before choosing one of them. I am now assured that you have, so all is fine.
ok
Quoted 5 lines
Quoted 4 lines
Regards,
Jeroen[1] https://github.com/jhofstee/u-boot/commit/5cd261fecc5397bf5abef82f6a781d8b04992654
Which board do you get warnings for?
Basically any, but as the commit message says, it is just for removing warnings when building with make W=1 or clang (which actually errors, without the other patch). There is no hurry in applying it. But e.g. for the twister I am sure you will see them, with the additional warnings enabled.
Regards,
Jeroen
PATCH 1/1 ARM:asm:io.h use static inline
Hi Jeroen,
Quoted 58 lines · Jeroen Hofstee
Hello Albert,
Quoted 24 lines · Albert ARIBAUD
Hi Jeroen,
(sorry for the near-duplicate, and see question at end)
Quoted 17 lines · Jeroen Hofstee
Hello Albert,
Quoted 14 lines · Albert ARIBAUD
Hi Jeroen,
Quoted 9 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>---
Quoted 6 lines
Quoted 4 lines
Quoted 3 lines
Ok, so the obvious question: what makes you decide to switch to 'static inline' rather than provide the extern versions that 'extern static' calls for?
Assuming your question is, why didn't you just add the prototypes instead?
It was more along the lines of "were you aware that you had a choice there?"
yes I was aware of that.
Quoted 12 lines
Quoted 12 lines
Well if we wanted to be brave gnu99 citizens we should provide the prototypes, the extern inline version and a separated definition in case the compiler fails / is not in the mood to inline the function. This quite fragile / some housekeeping. Furthermore it is gnu specific and likely fails with gcc -std=c99 as well.
Making them static inline there is always a single definition and it is up to the compiler to either inline it or make it a static function by it self. Since we were already relying on the compiler to inline it (at least I am unaware that there are non inline version around), this boils down to the same thing, but without warnings.
Quoted 8 lines
Quoted 4 lines
And... I can likely drop this one as well[1], although I haven't checked yet. linux does the same btw for
__LINUX_ARM_ARCH__>= 6.I can check binary size if that something you wonder about...
As I said, I have no stance on whether 'static inline' or 'extern inline' was better / more appropriate / other (please specify). I just wanted to make sure that you had considered both possibilities before choosing one of them. I am now assured that you have, so all is fine.
ok
Quoted 3 lines
Quoted 3 lines
Regards,
Jeroen
Quoted 7 lines
Quoted 2 lines
Which board do you get warnings for?
Basically any, but as the commit message says, it is just for removing warnings when building with
make W=1or clang (which actually errors, without the other patch). There is no hurry in applying it. But e.g. for the twister I am sure you will see them, with the additional warnings enabled.
Ok, seeing that it is not needed for customary builds, I'll defer this until after 2014.07.
Quoted 2 lines
Regards,
Jeroen
Amicalement,
Signature · 1 line
Albert.
Quoted 8 lines · Jeroen Hofstee
When compiling u-boot with W=1 the extern inline void for read* is likely causing the most noise. gcc / clang will warn there is never a actual declaration for these functions. Instead of declaring these extern make them static inline so it is actually declared.
cc Albert ARIBAUD <[email protected]>Signed-off-by Jeroen Hofstee <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140830/80444ad4/attachment.pgp>