* [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc
@ 2018-06-19 14:44 Baruch Siach
2018-06-19 20:52 ` Peter Korsgaard
0 siblings, 1 reply; 4+ messages in thread
From: Baruch Siach @ 2018-06-19 14:44 UTC (permalink / raw)
To: buildroot
Since the last version bump imx-usb-loader uses __builtin_bswap16 which
is not universally available in gcc older than version 4.8. Add a patch
switching to a local 16-bit bytes swap implementation.
Should fix:
http://autobuild.buildroot.net/results/a63/a63b593b7ef3b6d32e755afe42b77d47dbf0276e/
http://autobuild.buildroot.net/results/48c/48c95cfc65f99fa02be81a11303ba8999f57091a/
http://autobuild.buildroot.net/results/c9d/c9d4f99b49ddb9b2ce08fce7672dd7c70cf62912/
Cc: Adam Duskett <aduskett@gmail.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
....h-fix-build-with-gcc-older-than-4.8.patch | 42 +++++++++++++++++++
1 file changed, 42 insertions(+)
create mode 100644 package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
diff --git a/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
new file mode 100644
index 000000000000..c0aabed542c6
--- /dev/null
+++ b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
@@ -0,0 +1,42 @@
+From c581e6037ec7ab2f9cd615f6ffa149b4d0a5638c Mon Sep 17 00:00:00 2001
+From: Baruch Siach <baruch@tkos.co.il>
+Date: Tue, 19 Jun 2018 15:31:52 +0300
+Subject: [PATCH] portable.h: fix build with gcc older than 4.8
+
+__builtin_bswap16 is available in all gcc architectures only since
+version 4.8. Older gcc versions fail to build:
+
+imx_sdp.o: In function `perform_dcd':
+.../imx_sdp.c:1138: undefined reference to `__builtin_bswap16'
+imx_sdp.o: In function `write_dcd_table_ivt':
+.../imx_sdp.c:457: undefined reference to `__builtin_bswap16'
+imx_sdp.o: In function `write_dcd':
+.../imx_sdp.c:410: undefined reference to `__builtin_bswap16'
+imx_sdp.o: In function `init_header':
+.../imx_sdp.c:1075: undefined reference to `__builtin_bswap16'
+
+Use a local implementation instead.
+
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+---
+Upstream status: https://github.com/boundarydevices/imx_usb_loader/pull/82
+
+ portable.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/portable.h b/portable.h
+index 364fe47b212a..364832b5ea69 100644
+--- a/portable.h
++++ b/portable.h
+@@ -58,7 +58,7 @@ extern int debugmode;
+ #ifdef __GNUC__
+ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ #define BE32(x) __builtin_bswap32(x)
+-#define BE16(x) __builtin_bswap16(x)
++#define BE16(x) (x<<8 | x>>8)
+ #else
+ #define BE32(x) x
+ #define BE16(x) x
+--
+2.17.1
+
--
2.17.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc
2018-06-19 14:44 [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc Baruch Siach
@ 2018-06-19 20:52 ` Peter Korsgaard
2018-06-21 21:56 ` Arnout Vandecappelle
0 siblings, 1 reply; 4+ messages in thread
From: Peter Korsgaard @ 2018-06-19 20:52 UTC (permalink / raw)
To: buildroot
>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
> Since the last version bump imx-usb-loader uses __builtin_bswap16 which
> is not universally available in gcc older than version 4.8. Add a patch
> switching to a local 16-bit bytes swap implementation.
> Should fix:
> http://autobuild.buildroot.net/results/a63/a63b593b7ef3b6d32e755afe42b77d47dbf0276e/
> http://autobuild.buildroot.net/results/48c/48c95cfc65f99fa02be81a11303ba8999f57091a/
> http://autobuild.buildroot.net/results/c9d/c9d4f99b49ddb9b2ce08fce7672dd7c70cf62912/
> Cc: Adam Duskett <aduskett@gmail.com>
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> ---
> ....h-fix-build-with-gcc-older-than-4.8.patch | 42 +++++++++++++++++++
> 1 file changed, 42 insertions(+)
> create mode 100644 package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> diff --git
> a/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> new file mode 100644
> index 000000000000..c0aabed542c6
> --- /dev/null
> +++ b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> @@ -0,0 +1,42 @@
> +From c581e6037ec7ab2f9cd615f6ffa149b4d0a5638c Mon Sep 17 00:00:00 2001
> +From: Baruch Siach <baruch@tkos.co.il>
> +Date: Tue, 19 Jun 2018 15:31:52 +0300
> +Subject: [PATCH] portable.h: fix build with gcc older than 4.8
> +
> +__builtin_bswap16 is available in all gcc architectures only since
> +version 4.8. Older gcc versions fail to build:
> +
> +imx_sdp.o: In function `perform_dcd':
> +.../imx_sdp.c:1138: undefined reference to `__builtin_bswap16'
> +imx_sdp.o: In function `write_dcd_table_ivt':
> +.../imx_sdp.c:457: undefined reference to `__builtin_bswap16'
> +imx_sdp.o: In function `write_dcd':
> +.../imx_sdp.c:410: undefined reference to `__builtin_bswap16'
> +imx_sdp.o: In function `init_header':
> +.../imx_sdp.c:1075: undefined reference to `__builtin_bswap16'
> +
> +Use a local implementation instead.
> +
> +Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> +---
> +Upstream status: https://github.com/boundarydevices/imx_usb_loader/pull/82
> +
> + portable.h | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/portable.h b/portable.h
> +index 364fe47b212a..364832b5ea69 100644
> +--- a/portable.h
> ++++ b/portable.h
> +@@ -58,7 +58,7 @@ extern int debugmode;
> + #ifdef __GNUC__
> + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> + #define BE32(x) __builtin_bswap32(x)
> +-#define BE16(x) __builtin_bswap16(x)
> ++#define BE16(x) (x<<8 | x>>8)
I take it this is never called on anything where the double evaluation
causes any side effects?
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc
2018-06-19 20:52 ` Peter Korsgaard
@ 2018-06-21 21:56 ` Arnout Vandecappelle
2018-06-22 10:22 ` Peter Korsgaard
0 siblings, 1 reply; 4+ messages in thread
From: Arnout Vandecappelle @ 2018-06-21 21:56 UTC (permalink / raw)
To: buildroot
On 19-06-18 22:52, Peter Korsgaard wrote:
>>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
>
> > Since the last version bump imx-usb-loader uses __builtin_bswap16 which
> > is not universally available in gcc older than version 4.8. Add a patch
> > switching to a local 16-bit bytes swap implementation.
>
> > Should fix:
> > http://autobuild.buildroot.net/results/a63/a63b593b7ef3b6d32e755afe42b77d47dbf0276e/
> > http://autobuild.buildroot.net/results/48c/48c95cfc65f99fa02be81a11303ba8999f57091a/
> > http://autobuild.buildroot.net/results/c9d/c9d4f99b49ddb9b2ce08fce7672dd7c70cf62912/
>
> > Cc: Adam Duskett <aduskett@gmail.com>
> > Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> > ---
> > ....h-fix-build-with-gcc-older-than-4.8.patch | 42 +++++++++++++++++++
> > 1 file changed, 42 insertions(+)
> > create mode 100644 package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
>
> > diff --git
> > a/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> > b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> > new file mode 100644
> > index 000000000000..c0aabed542c6
> > --- /dev/null
> > +++ b/package/imx-usb-loader/0001-portable.h-fix-build-with-gcc-older-than-4.8.patch
> > @@ -0,0 +1,42 @@
> > +From c581e6037ec7ab2f9cd615f6ffa149b4d0a5638c Mon Sep 17 00:00:00 2001
> > +From: Baruch Siach <baruch@tkos.co.il>
> > +Date: Tue, 19 Jun 2018 15:31:52 +0300
> > +Subject: [PATCH] portable.h: fix build with gcc older than 4.8
> > +
> > +__builtin_bswap16 is available in all gcc architectures only since
> > +version 4.8. Older gcc versions fail to build:
> > +
> > +imx_sdp.o: In function `perform_dcd':
> > +.../imx_sdp.c:1138: undefined reference to `__builtin_bswap16'
> > +imx_sdp.o: In function `write_dcd_table_ivt':
> > +.../imx_sdp.c:457: undefined reference to `__builtin_bswap16'
> > +imx_sdp.o: In function `write_dcd':
> > +.../imx_sdp.c:410: undefined reference to `__builtin_bswap16'
> > +imx_sdp.o: In function `init_header':
> > +.../imx_sdp.c:1075: undefined reference to `__builtin_bswap16'
> > +
> > +Use a local implementation instead.
> > +
> > +Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> > +---
> > +Upstream status: https://github.com/boundarydevices/imx_usb_loader/pull/82
> > +
> > + portable.h | 2 +-
> > + 1 file changed, 1 insertion(+), 1 deletion(-)
> > +
> > +diff --git a/portable.h b/portable.h
> > +index 364fe47b212a..364832b5ea69 100644
> > +--- a/portable.h
> > ++++ b/portable.h
> > +@@ -58,7 +58,7 @@ extern int debugmode;
> > + #ifdef __GNUC__
> > + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> > + #define BE32(x) __builtin_bswap32(x)
> > +-#define BE16(x) __builtin_bswap16(x)
> > ++#define BE16(x) (x<<8 | x>>8)
>
> I take it this is never called on anything where the double evaluation
> causes any side effects?
Even so, x without parenthesis around it is extremely dangerous...
Since this is inside __GNUC__, we could just use an expression statement like
in the kernel:
#define BE16(x) \
({ \
typeof(x) __x = (x); \
(__x<<8 | __x>>8); \
})
Regards,
Arnout
>
> Committed, thanks.
>
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc
2018-06-21 21:56 ` Arnout Vandecappelle
@ 2018-06-22 10:22 ` Peter Korsgaard
0 siblings, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2018-06-22 10:22 UTC (permalink / raw)
To: buildroot
>>>>> "Arnout" == Arnout Vandecappelle <arnout@mind.be> writes:
Hi,
>> > ++#define BE16(x) (x<<8 | x>>8)
>>
>> I take it this is never called on anything where the double evaluation
>> causes any side effects?
> Even so, x without parenthesis around it is extremely dangerous...
> Since this is inside __GNUC__, we could just use an expression statement like
> in the kernel:
> #define BE16(x) \
> ({ \
> typeof(x) __x = (x); \
> (__x<<8 | __x>>8); \
> })
Correct. Baruch, will you send an update (here and upstream)?
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-06-22 10:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-19 14:44 [Buildroot] [PATCH] imx-usb-loader: fix build with older gcc Baruch Siach
2018-06-19 20:52 ` Peter Korsgaard
2018-06-21 21:56 ` Arnout Vandecappelle
2018-06-22 10:22 ` Peter Korsgaard
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.