Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1236468 > unrolled thread
| Started by | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| First post | 2015-09-30 18:00 +0200 |
| Last post | 2015-10-03 22:50 +0200 |
| Articles | 10 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-09-30 18:00 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-09-30 18:10 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-09-30 18:20 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-09-30 18:20 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-09-30 19:30 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h Nathan Lynch <Nathan_Lynch@mentor.com> - 2015-09-30 19:40 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-09-30 19:50 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h Nathan Lynch <Nathan_Lynch@mentor.com> - 2015-09-30 20:20 +0200
Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-09-30 21:10 +0200
[PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h "H. Nikolaus Schaller" <hns@goldelico.com> - 2015-10-03 22:50 +0200
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-09-30 18:00 +0200 |
| Subject | [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h |
| Message-ID | <qerXs-14n-13@gated-at.bofh.it> |
If the host toolchain is not glibc based then the arm kernel build fails with HOSTCC arch/arm/vdso/vdsomunge arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF cross-compiler. Reason: byteswap.h is a glibc only header. Changed to detect the host and include the right file as described at: https://bugs.freedesktop.org/show_bug.cgi?id=8882 Tested to compile on Mac OS X 10.9.5 host. Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> --- arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c index aedec81..5364cea 100644 --- a/arch/arm/vdso/vdsomunge.c +++ b/arch/arm/vdso/vdsomunge.c @@ -45,7 +45,25 @@ * it does. */ +#if defined(__linux__) #include <byteswap.h> +#elif defined(__OpenBSD__) +#include <sys/endian.h> +#define bswap_16 __swap16 +#define bswap_32 __swap32 +#define bswap_64 __swap64 +#elif defined(__APPLE__) +#include <libkern/OSByteOrder.h> +#define bswap_16 OSSwapInt16 +#define bswap_32 OSSwapInt32 +#define bswap_64 OSSwapInt64 +#else +#include <sys/endian.h> +#define bswap_16 bswap16 +#define bswap_32 bswap32 +#define bswap_64 bswap64 +#endif + #include <elf.h> #include <errno.h> #include <fcntl.h> -- 2.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Ard Biesheuvel <ard.biesheuvel@linaro.org> |
|---|---|
| Date | 2015-09-30 18:10 +0200 |
| Message-ID | <qes77-1uV-3@gated-at.bofh.it> |
| In reply to | #1236468 |
On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote: > If the host toolchain is not glibc based then the arm kernel build > fails with > > HOSTCC arch/arm/vdso/vdsomunge > arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory > > Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF > cross-compiler. > > Reason: byteswap.h is a glibc only header. > > Changed to detect the host and include the right file as described at: > > https://bugs.freedesktop.org/show_bug.cgi?id=8882 > > Tested to compile on Mac OS X 10.9.5 host. > > Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> > --- > arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c > index aedec81..5364cea 100644 > --- a/arch/arm/vdso/vdsomunge.c > +++ b/arch/arm/vdso/vdsomunge.c > @@ -45,7 +45,25 @@ > * it does. > */ > > +#if defined(__linux__) > #include <byteswap.h> > +#elif defined(__OpenBSD__) > +#include <sys/endian.h> > +#define bswap_16 __swap16 > +#define bswap_32 __swap32 > +#define bswap_64 __swap64 > +#elif defined(__APPLE__) > +#include <libkern/OSByteOrder.h> > +#define bswap_16 OSSwapInt16 > +#define bswap_32 OSSwapInt32 > +#define bswap_64 OSSwapInt64 > +#else > +#include <sys/endian.h> > +#define bswap_16 bswap16 > +#define bswap_32 bswap32 > +#define bswap_64 bswap64 > +#endif > + Have you tried this? #define bswap_16 __builtin_bswap16 #define bswap_32 __builtin_bswap32 #define bswap_64 __builtin_bswap64 https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-09-30 18:20 +0200 |
| Message-ID | <qesgO-1GU-41@gated-at.bofh.it> |
| In reply to | #1236481 |
Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: > On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote: >> If the host toolchain is not glibc based then the arm kernel build >> fails with >> >> HOSTCC arch/arm/vdso/vdsomunge >> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory >> >> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF >> cross-compiler. >> >> Reason: byteswap.h is a glibc only header. >> >> Changed to detect the host and include the right file as described at: >> >> https://bugs.freedesktop.org/show_bug.cgi?id=8882 >> >> Tested to compile on Mac OS X 10.9.5 host. >> >> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> >> --- >> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++ >> 1 file changed, 18 insertions(+) >> >> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c >> index aedec81..5364cea 100644 >> --- a/arch/arm/vdso/vdsomunge.c >> +++ b/arch/arm/vdso/vdsomunge.c >> @@ -45,7 +45,25 @@ >> * it does. >> */ >> >> +#if defined(__linux__) >> #include <byteswap.h> >> +#elif defined(__OpenBSD__) >> +#include <sys/endian.h> >> +#define bswap_16 __swap16 >> +#define bswap_32 __swap32 >> +#define bswap_64 __swap64 >> +#elif defined(__APPLE__) >> +#include <libkern/OSByteOrder.h> >> +#define bswap_16 OSSwapInt16 >> +#define bswap_32 OSSwapInt32 >> +#define bswap_64 OSSwapInt64 >> +#else >> +#include <sys/endian.h> >> +#define bswap_16 bswap16 >> +#define bswap_32 bswap32 >> +#define bswap_64 bswap64 >> +#endif >> + > > Have you tried this? > > #define bswap_16 __builtin_bswap16 > #define bswap_32 __builtin_bswap32 > #define bswap_64 __builtin_bswap64 > > https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html OS X host uses llvm and I am not sure if these builtins are always available. So it replaces an include file dependency by a compiler built-in dependency. IMHO my approach is more general and should cover a broader range of compile hosts. This is a tool compiled by HOSTCC to be run on the build host - so I think we can't assume to have a gcc host compiler (while for the CC cross-compiler we can). Thanks, Nikolaus Schaller -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Ard Biesheuvel <ard.biesheuvel@linaro.org> |
|---|---|
| Date | 2015-09-30 18:20 +0200 |
| Message-ID | <qesgO-1GU-39@gated-at.bofh.it> |
| In reply to | #1236500 |
On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote: > > Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: > >> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote: >>> If the host toolchain is not glibc based then the arm kernel build >>> fails with >>> >>> HOSTCC arch/arm/vdso/vdsomunge >>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory >>> >>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF >>> cross-compiler. >>> >>> Reason: byteswap.h is a glibc only header. >>> >>> Changed to detect the host and include the right file as described at: >>> >>> https://bugs.freedesktop.org/show_bug.cgi?id=8882 >>> >>> Tested to compile on Mac OS X 10.9.5 host. >>> >>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> >>> --- >>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++ >>> 1 file changed, 18 insertions(+) >>> >>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c >>> index aedec81..5364cea 100644 >>> --- a/arch/arm/vdso/vdsomunge.c >>> +++ b/arch/arm/vdso/vdsomunge.c >>> @@ -45,7 +45,25 @@ >>> * it does. >>> */ >>> >>> +#if defined(__linux__) >>> #include <byteswap.h> >>> +#elif defined(__OpenBSD__) >>> +#include <sys/endian.h> >>> +#define bswap_16 __swap16 >>> +#define bswap_32 __swap32 >>> +#define bswap_64 __swap64 >>> +#elif defined(__APPLE__) >>> +#include <libkern/OSByteOrder.h> >>> +#define bswap_16 OSSwapInt16 >>> +#define bswap_32 OSSwapInt32 >>> +#define bswap_64 OSSwapInt64 >>> +#else >>> +#include <sys/endian.h> >>> +#define bswap_16 bswap16 >>> +#define bswap_32 bswap32 >>> +#define bswap_64 bswap64 >>> +#endif >>> + >> >> Have you tried this? >> >> #define bswap_16 __builtin_bswap16 >> #define bswap_32 __builtin_bswap32 >> #define bswap_64 __builtin_bswap64 >> >> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html > > OS X host uses llvm and I am not sure if these builtins are > always available. > I am pretty sure recent clang supports these as well. Could you please try it? > So it replaces an include file dependency by a compiler > built-in dependency. IMHO my approach is more general > and should cover a broader range of compile hosts. > > This is a tool compiled by HOSTCC to be run on the build > host - so I think we can't assume to have a gcc host compiler > (while for the CC cross-compiler we can). > If my suggestion works, we'll support host side GCC and clang without decorating the source code with lots of #ifdefs for OSes few people care about. That would be an improvement imo Thanks, Ard. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-09-30 19:30 +0200 |
| Message-ID | <qetmy-3dp-23@gated-at.bofh.it> |
| In reply to | #1236502 |
Hi, Am 30.09.2015 um 18:17 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: > On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote: >> >> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: >> >>> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote: >>>> If the host toolchain is not glibc based then the arm kernel build >>>> fails with >>>> >>>> HOSTCC arch/arm/vdso/vdsomunge >>>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory >>>> >>>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF >>>> cross-compiler. >>>> >>>> Reason: byteswap.h is a glibc only header. >>>> >>>> Changed to detect the host and include the right file as described at: >>>> >>>> https://bugs.freedesktop.org/show_bug.cgi?id=8882 >>>> >>>> Tested to compile on Mac OS X 10.9.5 host. >>>> >>>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> >>>> --- >>>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++ >>>> 1 file changed, 18 insertions(+) >>>> >>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c >>>> index aedec81..5364cea 100644 >>>> --- a/arch/arm/vdso/vdsomunge.c >>>> +++ b/arch/arm/vdso/vdsomunge.c >>>> @@ -45,7 +45,25 @@ >>>> * it does. >>>> */ >>>> >>>> +#if defined(__linux__) >>>> #include <byteswap.h> >>>> +#elif defined(__OpenBSD__) >>>> +#include <sys/endian.h> >>>> +#define bswap_16 __swap16 >>>> +#define bswap_32 __swap32 >>>> +#define bswap_64 __swap64 >>>> +#elif defined(__APPLE__) >>>> +#include <libkern/OSByteOrder.h> >>>> +#define bswap_16 OSSwapInt16 >>>> +#define bswap_32 OSSwapInt32 >>>> +#define bswap_64 OSSwapInt64 >>>> +#else >>>> +#include <sys/endian.h> >>>> +#define bswap_16 bswap16 >>>> +#define bswap_32 bswap32 >>>> +#define bswap_64 bswap64 >>>> +#endif >>>> + >>> >>> Have you tried this? >>> >>> #define bswap_16 __builtin_bswap16 >>> #define bswap_32 __builtin_bswap32 >>> #define bswap_64 __builtin_bswap64 >>> >>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html >> >> OS X host uses llvm and I am not sure if these builtins are >> always available. >> > > I am pretty sure recent clang supports these as well. Could you please try it? What release date (= feature set) of a compiler would you no longer consider as "recent"? > >> So it replaces an include file dependency by a compiler >> built-in dependency. IMHO my approach is more general >> and should cover a broader range of compile hosts. >> >> This is a tool compiled by HOSTCC to be run on the build >> host - so I think we can't assume to have a gcc host compiler >> (while for the CC cross-compiler we can). >> > > If my suggestion works, we'll support host side GCC and clang without > decorating the source code with lots of #ifdefs for OSes few people > care about. That would be an improvement imo Indeed it would be the best solution. But at least my Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) it does *not* work (see also for example http://sourceforge.net/p/flac/bugs/416/ ). Clang 3.5 appears to provide all features of GCC 4.7. I have checked and it appears that __builtin_bswap16 only became available in GCC 4.8 (released 2013-03-22). And maybe in Clang 3.7. Unfortunately I could not find a reference what the minimum required gcc for the Linux HOSTCC currently is. So if we require gcc >= 4.8 just by this small tool, this should be made well known and well decided. Therefore I would propose to use the #ifdef approach now and revise 5 years after gcc 4.8 release (2013 ==> 2018) if __builtin_bswap16 (or something else) has become a widely available standard. I can add this to the patch commit V2 for reference. BR and thanks, Nikolaus Schaller -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Nathan Lynch <Nathan_Lynch@mentor.com> |
|---|---|
| Date | 2015-09-30 19:40 +0200 |
| Message-ID | <qetwe-3ox-39@gated-at.bofh.it> |
| In reply to | #1236502 |
On 09/30/2015 11:17 AM, Ard Biesheuvel wrote: > On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote: >> >> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: >>> >>> Have you tried this? >>> >>> #define bswap_16 __builtin_bswap16 >>> #define bswap_32 __builtin_bswap32 >>> #define bswap_64 __builtin_bswap64 >>> >>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html >> >> OS X host uses llvm and I am not sure if these builtins are >> always available. >> > > I am pretty sure recent clang supports these as well. Could you please try it? Well, I think GCC did not provide __builtin_bswap16 consistently until the 4.8 release: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624 That seems too recent to me. vdsomunge makes only three or four potentially byteswapped accesses to the ELF header. It's not worth a lot of effort to try to use the most optimal implementation available. Why not just use a generic implementation like is found in mips' elf2ecoff? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-09-30 19:50 +0200 |
| Message-ID | <qetFU-3Ao-5@gated-at.bofh.it> |
| In reply to | #1236584 |
Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>: > On 09/30/2015 11:17 AM, Ard Biesheuvel wrote: >> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote: >>> >>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>: >>>> >>>> Have you tried this? >>>> >>>> #define bswap_16 __builtin_bswap16 >>>> #define bswap_32 __builtin_bswap32 >>>> #define bswap_64 __builtin_bswap64 >>>> >>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html >>> >>> OS X host uses llvm and I am not sure if these builtins are >>> always available. >>> >> >> I am pretty sure recent clang supports these as well. Could you please try it? > > Well, I think GCC did not provide __builtin_bswap16 consistently until > the 4.8 release: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624 > > That seems too recent to me. Same for me. > > vdsomunge makes only three or four potentially byteswapped accesses to > the ELF header. It's not worth a lot of effort to try to use the most > optimal implementation available. Especially as it does not run on the target device but the build host. > Why not just use a generic > implementation like is found in mips' elf2ecoff? Do you have a reference? I can't find byte swapping in https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3 BR and thanks, Nikolaus Schaller-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Nathan Lynch <Nathan_Lynch@mentor.com> |
|---|---|
| Date | 2015-09-30 20:20 +0200 |
| Message-ID | <qeu8W-4ns-31@gated-at.bofh.it> |
| In reply to | #1236588 |
On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote: > > Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>: >> Why not just use a generic >> implementation like is found in mips' elf2ecoff? > > Do you have a reference? > I can't find byte swapping in > > https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3 See the swab16 and swab32 macros (yes, "swab" not "swap"). Or the __constant_swab* macros in include/linux/uapi/swab.h. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-09-30 21:10 +0200 |
| Message-ID | <qeuVk-5xW-23@gated-at.bofh.it> |
| In reply to | #1236619 |
Am 30.09.2015 um 20:17 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>: > On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote: >> >> Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>: >>> Why not just use a generic >>> implementation like is found in mips' elf2ecoff? >> >> Do you have a reference? >> I can't find byte swapping in >> >> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3 > > See the swab16 and swab32 macros (yes, "swab" not "swap"). > > Or the __constant_swab* macros in include/linux/uapi/swab.h. > Ah, I did search for swaP... And, I though that they are more conditional on the CPU endianness but that would be sort of htons() and ntohl() and friends. Then I see no problem adding such macros and getting rid of the #include completely. Which is compiler independent and OS independent. Will prepare and submit a V2 asap. Thanks and BR, Nikolaus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | "H. Nikolaus Schaller" <hns@goldelico.com> |
|---|---|
| Date | 2015-10-03 22:50 +0200 |
| Subject | [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h |
| Message-ID | <qfBUJ-4pO-1@gated-at.bofh.it> |
| In reply to | #1236468 |
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Solution: replace by private byte-swapping macros (taken from
arch/mips/boot/elf2ecoff.c)
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..27a9a0b 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,18 @@
* it does.
*/
-#include <byteswap.h>
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -104,17 +115,17 @@ static void cleanup(void)
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
{
- return swap ? bswap_16(half) : half;
+ return swap ? swab16(half) : half;
}
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
int main(int argc, char **argv)
--
2.5.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web