|
Message-ID: <20181014015106.GH5150@brightrain.aerifal.cx> Date: Sat, 13 Oct 2018 21:51:06 -0400 From: Rich Felker <dalias@...c.org> To: K Jelesnianski <kjski@...edu> Cc: musl@...ts.openwall.com Subject: Re: compiling SPECCPU2006 against Musl On Sat, Oct 13, 2018 at 05:47:50PM -0400, K Jelesnianski wrote: > Dear mailing list, > > I am curious if anyone has any insight on how to link the SPECCPU2006 > benchmarks against Lusl Libc. Reading FAQ I saw that Musl does *not* have > C++ support out of the box but can still "hopefully" work in some cases > against glibstdc++ > I havent found any resources or guides on-line of people doing this. I would not describe it as "musl does not have C++ support". Rather, musl is not an implementation of the C++ stdlib (and neither is glibc), but that just means you use whichever C++ stdlib you want with it (GCC's libstdc++ or the llvm-associated libc++). > Anyways I am only focusing on the C implementation SPEC benchmarks and out > of this subset I was still only able to compile a few. The following do not > compile against MUSL: > 400.perlbench > 403.gcc > 462.libquantum > > I tried to use both clang 6.0.0 and gcc and got the following error below > (Dump at end of email). Any thoughts? > for perlbench - at first was "undefined reference to __isnan" but then > after adding -I/path/to/musl/install/include I got even more errors. I am > using the -std=gnu89 flag since this was how SPEC documented its fix for a > multiple definition error. The other 2 benchmarks show similar errors. It sounds like something is wrong with your setup for making the toolchain target musl. Repurposing an existing toolchain that's pulling in library and include dirs from whatever your existing host libc is (presumably glibc) is hard to get right. See below: > Sincerely, > K Jelesnianski > > Error Dump for perlbench: > > clang -c -o perlio.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O2 > -fno-strict-aliasing -g -fPIC -fomit-frame-pointer > -I/home/c/workspace/research/mardu/bin/include -DSPEC_CPU_LP64 > -DSPEC_CPU_LINUX_X64 -std=gnu89 perlio.c > In file included from perlio.c:50: > In file included from ./perl.h:384: > In file included from > /home/c/workspace/research/mardu/bin/include/sys/types.h:70: > /home/c/workspace/research/mardu/bin/include/endian.h:32:25: warning: > '&' within '|' [-Wbitwise-op-parentheses] > return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; > ~ ~~~~~~^~~~~~~ > /home/c/workspace/research/mardu/bin/include/endian.h:32:25: note: > place parentheses around the '&' expression to silence this warning > return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; > ^ > ( ) > /home/c/workspace/research/mardu/bin/include/endian.h:32:41: warning: > '&' within '|' [-Wbitwise-op-parentheses] > return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; > ~ ~~~~~~^~~~~~~~~ > /home/c/workspace/research/mardu/bin/include/endian.h:32:41: note: > place parentheses around the '&' expression to silence this warning > return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; > ^ > ( ) > /home/c/workspace/research/mardu/bin/include/endian.h:37:23: warning: > operator '<<' has lower precedence than '+'; '+' will be evaluated > first [-Wshift-op-parentheses] > return __bswap32(__x)+0ULL<<32 | __bswap32(__x>>32); > ~~~~~~~~~~~~~~^~~~~~~ > /home/c/workspace/research/mardu/bin/include/endian.h:37:23: note: > place parentheses around the '+' expression to silence this warning > return __bswap32(__x)+0ULL<<32 | __bswap32(__x>>32); > ^ > ( ) The compiler should not produce style warnings for macros expanded from system headers, but I believe this is a known clang misfeature. In any case this one is just a warning. > perlio.c:2308:21: error: use of undeclared identifier 'O_TRUNC'; did > you mean 'OP_TRANS'? > oflags = O_CREAT | O_TRUNC; > ^~~~~~~ > OP_TRANS > ../opnames.h:51:2: note: 'OP_TRANS' declared here > OP_TRANS, /* 35 */ > ^ > perlio.c:2318:21: error: use of undeclared identifier 'O_APPEND' > oflags = O_CREAT | O_APPEND; > ^ No idea how O_CREAT was defined but O_TRUNC and O_APPEND were not. This sounds like either perlio.h failed to include fcntl.h and something else provided a fallback definition of O_CREAT, or you have a corrupted installation of the musl headers. > perlio.c:3046:28: error: incomplete definition of type 'struct _IO_FILE' > STDCHAR *eptr = (STDCHAR*)PerlSIO_get_ptr(s); > ^~~~~~~~~~~~~~~~~~ > ../iperlsys.h:305:29: note: expanded from macro 'PerlSIO_get_ptr' > #define PerlSIO_get_ptr(f) FILE_ptr(f) > ^~~~~~~~~~~ > ../spec_config.h:814:30: note: expanded from macro 'FILE_ptr' > # define FILE_ptr(fp) ((fp)->_IO_read_ptr) > ~~~~^ > /home/c/workspace/research/mardu/bin/include/bits/alltypes.h:356:16: > note: forward declaration of 'struct _IO_FILE' > typedef struct _IO_FILE FILE; > ^ > perlio.c:3054:20: error: incomplete definition of type 'struct _IO_FILE' > if ((STDCHAR*)PerlSIO_get_ptr(s) != --eptr || ((*eptr & > 0xFF) != ch)) { > ^~~~~~~~~~~~~~~~~~ > ../iperlsys.h:305:29: note: expanded from macro 'PerlSIO_get_ptr' > #define PerlSIO_get_ptr(f) FILE_ptr(f) > ^~~~~~~~~~~ This code is trying to poke at glibc FILE structure internals and is invalid. Depending on what it's trying to do there may or may not be a valid way to achieve the same thing. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.