Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 503008 - >=sys-fs/dd-rescue-1.41 Fails on compile phase because -msse4.2 is wrongly enabled by configure
Summary: >=sys-fs/dd-rescue-1.41 Fails on compile phase because -msse4.2 is wrongly en...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Core system (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo's Team for Core System packages
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-02-28 01:27 UTC by jospezial
Modified: 2014-10-17 19:59 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description jospezial 2014-02-28 01:27:12 UTC
from http://www.garloff.de/kurt/linux/ddrescue/
---------------------------------
History

Latest version is 1.41 (2014-02-25)
There has been a lot of internal refactoring that improves the detection of CPU features (at runtime) and libc/compiler features (at build time). One result is that this version supports building against the Android NDK. (armv7l binaries built against Android API 17 (aka 4.2) libc can be found below in the download section.) Another consequence is that AVX2 support is now enabled (for saving CPU cycles on sparse block detection). A few minor bugs have been addressed (the most serious one a harmless off-by-one on determining the size of a block device). Number formatting is more consistent now. There also a new option -u/--rmvtrim that deletes the created file again and issues a fstrim on the filesystem -- good if you filled the empty space of a filesystem with zeros for data protection and SSD refreshment.

Previous version was 1.40.1 (2014-02-15)
It just has one patch to fix the SSE2 detection on i386 -- the old code would end in an endless loop ...

-----------------------------------------------------

I copied and renamed the dd-rescue-1.40.ebuild from the tree
but this is what I get:


checking if x86_64-pc-linux-gnu-gcc supports -msse4.2... yes
checking if x86_64-pc-linux-gnu-gcc supports -mavx2... yes
configure: creating ./config.status
config.status: creating config.h
>>> Source configured.
>>> Compiling source in /var/tmp/portage/sys-fs/dd-rescue-1.41/work/dd_rescue ...
make -j1 'RPM_OPT_FLAGS=-march=native -O2 -pipe ' CFLAGS_OPT=$(CFLAGS) CC=x86_64-pc-linux-gnu-gcc 
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c frandom.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c fmt_no.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c find_nonzero.c 
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c fstrim.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -msse2 -c find_nonzero_sse2.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -msse4.2 -c ffs_sse42.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -mavx2 -c find_nonzero_avx.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -DVERSION=\"1.41\"  -D__COMPILER__="\"x86_64-pc-linux-gnu-gcc (Gentoo 4.8.2-r1 p1.4-ssptest, pie-0.5.9-ssptest) 4.8.2\"" dd_rescue.c -o dd_rescue frandom.o fmt_no.o find_nonzero.o  fstrim.o find_nonzero_sse2.o ffs_sse42.o find_nonzero_avx.o -Wl,-O1 -Wl,--as-needed -ldl
ffs_sse42.o: In function `probe_sse42':
ffs_sse42.c:(.text+0x4e): undefined reference to `_mm_popcnt_u32'
ffs_sse42.o: In function `myffs_sse42':
ffs_sse42.c:(.text+0xd): undefined reference to `_mm_popcnt_u32'
ffs_sse42.o: In function `myffsl_sse42':
ffs_sse42.c:(.text+0x2d): undefined reference to `_mm_popcnt_u64'
collect2: error: ld returned 1 exit status
Makefile:134: recipe for target 'dd_rescue' failed
make: *** [dd_rescue] Error 1
 * ERROR: sys-fs/dd-rescue-1.41::overlay_jl failed (compile phase):
 *   emake failed


I don't think my processor can do sse4*

cat /proc/cpuinfo 
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 107
model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+
stepping        : 1
cpu MHz         : 1000.000
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
bogomips        : 2009.04
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc 100mhzsteps

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 107
model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+
stepping        : 1
...
Comment 1 jospezial 2014-03-08 12:42:20 UTC
History

Latest version is 1.42.1 (2014-03-06)
1.42.1 contains a fix for a sublety how we set up a handler for SIGILL and return with longjmp to detect the supported instruction sets of the CPU -- we need to manually reset the process' signal mask, otherwise a second failed probe would abort.

Previous version is 1.42 (2014-03-03)
1.42 brings the possibility to load plugins to analyze or transform data before it's written to the output file(s). A plugin to calculate the MD5 hash is provided. posix_fadvise() is used if available (optimization) and dd_rescue now only provides a short usage info rather than the long help text on wrong parameters.


with 1.42.1 I get the same sse4.2 problem.
Comment 2 jospezial 2014-05-25 22:04:20 UTC
History

Latest version is 1.44 (2014-05-23)
The plugin libddr_MD5.so (short ddr_MD5) has been renamed to ddr_hash, reflecting that we also support sha1, sha256, sha224, sha512, sha384 now. Checks have been added to the test suite and the documentation been updated accordingly.

Previous version was 1.43 (2014-05-20)
The main feature of 1.43 is the new lzo plugin. It de/compresses data using the lzo algorithms, which are very fast to decompress and most versions are also fast to compress (at somewhat moderate compression levels). The plugin supports many of dd_rescue's features, such as skipping bad blocks (encoding sparseness/holes into the output) as well as appending. It also continues on errors (skipping a whole block if nodiscard is NOT given) and allows to search for valid lzo block headers if sync is lost. fuzz testing has been done to support reliability. A man page ddr_lzo(1) has been created.
The plugin interface has been enhanced to support ddr_lzo; the MD5 plugin has also seen some work beyond just refactoring: It supports the parameter output/outfd= now and supports all type of holes that can be generated in a chain with ddr_lzo now.
Some minor improvements (docu, messages) and bug fixes have been applied. There also is a new ARMv8 (AArch64 aka ARM64) optimized routine to detect zero-blocks.
Comment 3 jospezial 2014-05-25 22:08:18 UTC
I still have the problem with:

checking if x86_64-pc-linux-gnu-gcc supports -msse4.2... yes

and the resulting compile crash.
I could need some help here.
Comment 4 Lars Wendler (Polynomial-C) (RETIRED) gentoo-dev 2014-05-28 13:53:29 UTC
+*dd-rescue-1.44 (28 May 2014)
+
+  28 May 2014; Lars Wendler <polynomial-c@gentoo.org> +dd-rescue-1.44.ebuild:
+  Version bump.
+
Comment 5 jospezial 2014-05-29 00:00:09 UTC
checking if x86_64-pc-linux-gnu-gcc supports -msse4.2... yes
checking if x86_64-pc-linux-gnu-gcc supports -mavx2... yes
configure: creating ./config.status
config.status: creating config.h
>>> Source configured.
>>> Compiling source in /var/tmp/portage/sys-fs/dd-rescue-1.44/work/dd_rescue ...
make -j3 'RPM_OPT_FLAGS=-march=native -O2 -pipe ' CFLAGS_OPT=$(CFLAGS) CC=x86_64-pc-linux-gnu-gcc 
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c frandom.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c fmt_no.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c find_nonzero.c 
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -c fstrim.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -msse2 -c find_nonzero_sse2.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -msse4.2 -c ffs_sse42.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -mavx2 -c find_nonzero_avx.c
x86_64-pc-linux-gnu-gcc -march=native -O2 -pipe   -DHAVE_CONFIG_H -fPIC -o libddr_MD5.po -c libddr_MD5.c
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/include/smmintrin.h:811:0,
                 from ffs_sse42.c:10:
ffs_sse42.c: In function ‘myffs_sse42’:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/include/popcntintrin.h:35:1: error: inlining failed in call to always_inline ‘_mm_popcnt_u32’: target specific option mismatch
 _mm_popcnt_u32 (unsigned int __X)
 ^
ffs_sse42.c:20:2: error: called from here
  return _myffs_sse42(val);
  ^
Makefile:171: recipe for target 'ffs_sse42.o' failed
make: *** [ffs_sse42.o] Error 1
make: *** Waiting for unfinished jobs....
 * ERROR: sys-fs/dd-rescue-1.44::gentoo failed (compile phase):
 *   emake failed
Comment 6 jospezial 2014-05-29 00:17:04 UTC
(In reply to Lars Wendler (Polynomial-C) from comment #4)
> +*dd-rescue-1.44 (28 May 2014)
> +
> +  28 May 2014; Lars Wendler <polynomial-c@gentoo.org>
> +dd-rescue-1.44.ebuild:
> +  Version bump.
> +

Thank you for the letting that version into the tree.
It compiles on my other Gentoo PC only, which has sse4a.
Comment 7 SpanKY gentoo-dev 2014-10-17 19:39:11 UTC
this is fixed in 1.45+
Comment 8 jospezial 2014-10-17 19:59:24 UTC
(In reply to SpanKY from comment #7)
> this is fixed in 1.45+

Thanks for the info.
I have seen the other bugreport and the fix.
I could not test the fix because I did not have that computer the last months on which the bug was.