* bcache-tools fails to build with gcc 5.1.1
@ 2015-05-22 18:03 Rolf Fokkens
2015-05-26 5:28 ` David Mohr
0 siblings, 1 reply; 2+ messages in thread
From: Rolf Fokkens @ 2015-05-22 18:03 UTC (permalink / raw)
To: linux-bcache
Hi all,
By upgrading to Fedora 22 I've become a gcc 5.1.1 user. gcc rightfully
complains about the following during make:
[rolf.fokkens@home07 bcache-tools-1.0.8.orig]$ make
cc -O2 -Wall -g `pkg-config --cflags uuid blkid` -c -o bcache.o bcache.c
bcache.c:125:9: warning: ‘crc_table’ is static but used in inline
function ‘crc64’ which is not static
crc = crc_table[i] ^ (crc << 8);
^
cc -O2 -Wall -g `pkg-config --cflags uuid blkid` make-bcache.c
bcache.o `pkg-config --libs uuid blkid` -o make-bcache
/tmp/cchVVBrJ.o: In function `write_sb':
/tmp/bcache-tools-1.0.8.orig/make-bcache.c:277: undefined reference to
`crc64'
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'make-bcache' failed
make: *** [make-bcache] Error 1
[rolf.fokkens@home07 bcache-tools-1.0.8.orig]$
This fix is:
diff -ruN bcache-tools-1.0.8.orig/bcache.c bcache-tools-1.0.8/bcache.c
--- bcache-tools-1.0.8.orig/bcache.c 2014-12-04 23:51:24.000000000 +0100
+++ bcache-tools-1.0.8/bcache.c 2015-05-22 19:40:41.039355096 +0200
@@ -26,7 +26,7 @@
* x^7 + x^4 + x + 1
*/
-static const uint64_t crc_table[256] = {
+const uint64_t crc_table[256] = {
0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL, 0x85E1C3D753D46D26ULL,
0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL, 0x0BC387AEA7A8DA4CULL,
0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL, 0x9266CC8A1C85D9BEULL,
@@ -114,16 +114,3 @@
0x5DEDC41A34BBEEB2ULL, 0x1F1D25F19D51D821ULL, 0xD80C07CD676F8394ULL,
0x9AFCE626CE85B507ULL
};
-
-inline uint64_t crc64(const void *_data, size_t len)
-{
- uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
- const unsigned char *data = _data;
-
- while (len--) {
- int i = ((int) (crc >> 56) ^ *data++) & 0xFF;
- crc = crc_table[i] ^ (crc << 8);
- }
-
- return crc ^ 0xFFFFFFFFFFFFFFFFULL;
-}
diff -ruN bcache-tools-1.0.8.orig/bcache.h bcache-tools-1.0.8/bcache.h
--- bcache-tools-1.0.8.orig/bcache.h 2014-12-04 23:51:24.000000000 +0100
+++ bcache-tools-1.0.8/bcache.h 2015-05-22 19:40:34.924320569 +0200
@@ -115,7 +115,20 @@
#define BDEV_STATE_DIRTY 2U
#define BDEV_STATE_STALE 3U
-uint64_t crc64(const void *_data, size_t len);
+extern const uint64_t crc_table[];
+
+inline uint64_t crc64(const void *_data, size_t len)
+{
+ uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
+ const unsigned char *data = _data;
+
+ while (len--) {
+ int i = ((int) (crc >> 56) ^ *data++) & 0xFF;
+ crc = crc_table[i] ^ (crc << 8);
+ }
+
+ return crc ^ 0xFFFFFFFFFFFFFFFFULL;
+}
#define node(i, j) ((void *) ((i)->d + (j)))
#define end(i) node(i, (i)->keys)
This is also on github:
https://github.com/g2p/bcache-tools/pull/24
Cheers!
Rolf
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: bcache-tools fails to build with gcc 5.1.1
2015-05-22 18:03 bcache-tools fails to build with gcc 5.1.1 Rolf Fokkens
@ 2015-05-26 5:28 ` David Mohr
0 siblings, 0 replies; 2+ messages in thread
From: David Mohr @ 2015-05-26 5:28 UTC (permalink / raw)
To: Rolf Fokkens; +Cc: linux-bcache
Debian also noticed this issue [1] and had a submission of a slightly
simpler patch below. Since crc64 doesn't seem to be particularly
performance sensitive, I think it's nicer to just remove the inline (and
that's what I will include for now until one or the other is applied to
git).
~David
[1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=777798#10
diff --git a/bcache.c b/bcache.c
index 8f37445..8b4b986 100644
--- a/bcache.c
+++ b/bcache.c
@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = {
0x9AFCE626CE85B507ULL
};
-inline uint64_t crc64(const void *_data, size_t len)
+uint64_t crc64(const void *_data, size_t len)
{
uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
const unsigned char *data = _data;
On 2015-05-22 12:03, Rolf Fokkens wrote:
> Hi all,
>
> By upgrading to Fedora 22 I've become a gcc 5.1.1 user. gcc rightfully
> complains about the following during make:
>
> [rolf.fokkens@home07 bcache-tools-1.0.8.orig]$ make
> cc -O2 -Wall -g `pkg-config --cflags uuid blkid` -c -o bcache.o
> bcache.c
> bcache.c:125:9: warning: ‘crc_table’ is static but used in inline
> function ‘crc64’ which is not static
> crc = crc_table[i] ^ (crc << 8);
> ^
> cc -O2 -Wall -g `pkg-config --cflags uuid blkid` make-bcache.c
> bcache.o `pkg-config --libs uuid blkid` -o make-bcache
> /tmp/cchVVBrJ.o: In function `write_sb':
> /tmp/bcache-tools-1.0.8.orig/make-bcache.c:277: undefined reference to
> `crc64'
> collect2: error: ld returned 1 exit status
> <builtin>: recipe for target 'make-bcache' failed
> make: *** [make-bcache] Error 1
> [rolf.fokkens@home07 bcache-tools-1.0.8.orig]$
>
> This fix is:
>
> diff -ruN bcache-tools-1.0.8.orig/bcache.c bcache-tools-1.0.8/bcache.c
> --- bcache-tools-1.0.8.orig/bcache.c 2014-12-04 23:51:24.000000000
> +0100
> +++ bcache-tools-1.0.8/bcache.c 2015-05-22 19:40:41.039355096 +0200
> @@ -26,7 +26,7 @@
> * x^7 + x^4 + x + 1
> */
>
> -static const uint64_t crc_table[256] = {
> +const uint64_t crc_table[256] = {
> 0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL,
> 0x85E1C3D753D46D26ULL,
> 0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL,
> 0x0BC387AEA7A8DA4CULL,
> 0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL,
> 0x9266CC8A1C85D9BEULL,
> @@ -114,16 +114,3 @@
> 0x5DEDC41A34BBEEB2ULL, 0x1F1D25F19D51D821ULL,
> 0xD80C07CD676F8394ULL,
> 0x9AFCE626CE85B507ULL
> };
> -
> -inline uint64_t crc64(const void *_data, size_t len)
> -{
> - uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
> - const unsigned char *data = _data;
> -
> - while (len--) {
> - int i = ((int) (crc >> 56) ^ *data++) & 0xFF;
> - crc = crc_table[i] ^ (crc << 8);
> - }
> -
> - return crc ^ 0xFFFFFFFFFFFFFFFFULL;
> -}
> diff -ruN bcache-tools-1.0.8.orig/bcache.h bcache-tools-1.0.8/bcache.h
> --- bcache-tools-1.0.8.orig/bcache.h 2014-12-04 23:51:24.000000000
> +0100
> +++ bcache-tools-1.0.8/bcache.h 2015-05-22 19:40:34.924320569 +0200
> @@ -115,7 +115,20 @@
> #define BDEV_STATE_DIRTY 2U
> #define BDEV_STATE_STALE 3U
>
> -uint64_t crc64(const void *_data, size_t len);
> +extern const uint64_t crc_table[];
> +
> +inline uint64_t crc64(const void *_data, size_t len)
> +{
> + uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
> + const unsigned char *data = _data;
> +
> + while (len--) {
> + int i = ((int) (crc >> 56) ^ *data++) & 0xFF;
> + crc = crc_table[i] ^ (crc << 8);
> + }
> +
> + return crc ^ 0xFFFFFFFFFFFFFFFFULL;
> +}
>
> #define node(i, j) ((void *) ((i)->d + (j)))
> #define end(i) node(i, (i)->keys)
>
> This is also on github:
>
> https://github.com/g2p/bcache-tools/pull/24
>
> Cheers!
>
> Rolf
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bcache"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-05-26 7:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-22 18:03 bcache-tools fails to build with gcc 5.1.1 Rolf Fokkens
2015-05-26 5:28 ` David Mohr
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).