Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1236468 > unrolled thread

[PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h

Started by"H. Nikolaus Schaller" <hns@goldelico.com>
First post2015-09-30 18:00 +0200
Last post2015-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.


Contents

  [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

#1236468 — [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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]


#1236481

FromArd Biesheuvel <ard.biesheuvel@linaro.org>
Date2015-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]


#1236500

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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]


#1236502

FromArd Biesheuvel <ard.biesheuvel@linaro.org>
Date2015-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]


#1236565

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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]


#1236584

FromNathan Lynch <Nathan_Lynch@mentor.com>
Date2015-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]


#1236588

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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]


#1236619

FromNathan Lynch <Nathan_Lynch@mentor.com>
Date2015-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]


#1236662

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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]


#1238995 — [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h

From"H. Nikolaus Schaller" <hns@goldelico.com>
Date2015-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