On Wed, Jan 20, 2016 at 02:33:21PM +0000, Vicente Olivert Riera wrote: > On 20/01/16 13:15, Michael Niedermayer wrote: > > On Wed, Jan 20, 2016 at 12:21:37PM +0000, Vicente Olivert Riera wrote: > >> On 20/01/16 12:05, Michael Niedermayer wrote: > >>> On Wed, Jan 20, 2016 at 11:37:52AM +0000, Vicente Olivert Riera wrote: > >>>> Hello Michael, > >>>> > >>>> On 19/01/16 22:11, Michael Niedermayer wrote: > >>>>> On Thu, Jan 14, 2016 at 02:59:03PM +0000, Vicente Olivert Riera wrote: > >>>>>> Signed-off-by: Vicente Olivert Riera <vincent.ri...@imgtec.com> > >>>>>> --- > >>>>>> Changes v5 -> v6: > >>>>>> - Multiple changes: > >>>>>> - Use separate if blocks when detecting the MIPS ISA, this way when > >>>>>> a block > >>>>>> disables one ISA it will be detected by the next one. Before the > >>>>>> elif was > >>>>>> preventing this to be done. > >>>>>> - Don't use check_cflags and use only check_ldflags instead, which > >>>>>> will > >>>>>> check if that flag is valid for compiling and linking. The > >>>>>> compiler may > >>>>>> accept some cflags for compiling but not for linking, so if we > >>>>>> check first > >>>>>> for the cflags it will succeed, and the cflags will be added to > >>>>>> the CFLAGS > >>>>>> variable despite of the check_ldflags failing after that. This > >>>>>> can cause > >>>>>> problems because of having multiple incompatible cflags enabled > >>>>>> at the same > >>>>>> time. > >>>>>> - Check if mipsfpu has been disabled, and if so, then use > >>>>>> -msoft-float. This > >>>>>> way we override the compiler default behavious which can be > >>>>>> building for > >>>>>> hard-float. > >>>>>> - Explicitly disable the features that fail any check by adding "|| > >>>>>> disable > >>>>>> $feature" at the end of the checks chain. > >>>>>> > >>>>>> Changes v4 -> v5: > >>>>>> - Check for msa.h and disable msa if not found. > >>>>>> > >>>>>> Changes v3 -> v4: > >>>>>> - Nothing. > >>>>>> > >>>>>> Changes v2 -> v3: > >>>>>> - Nothing. > >>>>>> > >>>>>> Changes v1 -> v2: > >>>>>> - Add a block of code for mipsdspr2 which was previously placed in the > >>>>>> first patch of this series causing a syntax error in the configure > >>>>>> script. > >>>>>> > >>>>>> https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2015-November/183444.html > >>>>> > >>>>> make distclean ; ../configure --cross-prefix=/usr/mips-linux-gnu/bin/ > >>>>> --cc='ccache mips-linux-gnu-gcc-4.4' --arch=mips --target-os=linux > >>>>> --enable-cross-compile --disable-mipsfpu && make -j12 > >>>>> results in pages of: > >>>>> > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libswresample/libswresample.a(dither.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libswresample/libswresample.a(resample.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libswresample/libswresample.a(resample_dsp.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libavutil/libavutil.a(adler32.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libavutil/libavutil.a(aes.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libavutil/libavutil.a(aes_ctr.o) uses soft float > >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>>>> Warning: libavfilter/filtfmts-test uses hard float, > >>>>> libavutil/libavutil.a(audio_fifo.o) uses soft float > >>>>> > >>>>> > >>>>> [...] > >>>>> > >>>> > >>>> I can't reproduce your issue. Look: > >>>> > >>>> $ make distclean ; ./configure --cross-prefix=mips-linux-gnu- > >>>> --arch=mips --target-os=linux --enable-cross-compile --disable-mipsfpu > >>>> > >>>> And then: > >>>> > >>>> $ make -j1 V=1 2>&1 | tee build.log > >>>> > >>>> And then: > >>>> > >>>> $ grep "uses soft float" build.log > >>>> $ grep "filtfmts-test" build.log > >>>> > >>>> It gives me nothing. > >>>> > >>>> Also I try to find for that filtfmts-test file which your logs say that > >>>> is using hard-float, and I cannot find it: > >>>> > >>> > >>>> $ find . -name "filtfmts-test*" > >>>> $ > >>> > >>> see libavfilter/filtfmts.c > >> > >> But do you have a generated filtfmts-test binary or a filtfmts.o file? > >> Because when my build is finished I don't any anything of that. > > > > make libavfilter/filtfmts-test > > CC libavfilter/filtfmts-test.o > > libavfilter/filtfmts.c:141:9: warning: ignoring return value of function > > declared with warn_unused_result attribute [-Wunused-result] > > ff_default_query_formats(filter_ctx); > > ^~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ > > 1 warning generated. > > LD libavfilter/filtfmts-test > > > > the source and object files differ in their names > > > > I see. Ok, look at this: > > $ make libavfilter/filtfmts-test > CC libavfilter/filtfmts-test.o > libavfilter/filtfmts.c: In function 'main': > libavfilter/filtfmts.c:141:9: warning: ignoring return value of > 'ff_default_query_formats', declared with attribute warn_unused_result > [-Wunused-result] > ff_default_query_formats(filter_ctx); > ^ > LD libavfilter/filtfmts-test > > $ mips-linux-gnu-objdump -x libavfilter/filtfmts-test | grep "FP ABI" > FP ABI: Soft float > > It shows to me that it has been for soft-float. > > >> > >>> our compilers differ > >>> the one i have here is a binary from emdebian > >>> are you droping support for that ? > >>> if so that should be clearly stated in the commit message, and the > >>> compiler cleanly detected and a clear warning given to the user why > >>> his/her compiler isnt supported and what is supported > >> > >> Well, my intention isn't dropping support for anything, although this is > >> what the emdebian website says: > >> > >> "Status of Emdebian distributions > >> > >> As of July 2014, updates to the Emdebian distributions ceased. There > >> will be no further updates and no further stable releases." > > > > i know, the problem is not me, i can update, IIRC you guys posted a > > binary already > > but others might use similarly build or old compilers > > so keeping this one here gives some wider coverage ... and its less > > work > > I also want to keep it. > > >> > >> Anyway, how can I obtain the same compiler as you have in order to try > >> reproducing the bug? > > > > i dont know, if they arent on emdian anymore > > i dont seem to have the deb files in var/cache/apt/archive anymore > > > > Package: gcc-4.4-mips-linux-gnu > > Status: install ok installed > > Priority: extra > > Section: devel > > Installed-Size: 3088 > > Maintainer: Debian GCC Maintainers <debian-...@lists.debian.org> > > Architecture: amd64 > > Source: gcc-4.4 > > Version: 4.4.5-8 > > Provides: c-compiler-mips-linux-gnu > > Depends: gcc-4.4-mips-linux-gnu-base (= 4.4.5-8), cpp-4.4-mips-linux-gnu (= > > 4.4.5-8), binutils-mips-linux-gnu (>= 2.20.1-15~), libgcc1-mips-cross (>= > > 1:4.4.5-8), libgomp1-mips-cross (>= 4.4.5-8), libc6 (>= 2.11) > > Recommends: libc6-dev-mips-cross (>= 2.5) > > Suggests: gcc-4.4-multilib-mips-linux-gnu, libmudflap0-4.4-dev-mips-cross > > (>= 4.4.5-8), gcc-4.4-doc (>= 4.4.4-17), gcc-4.4-locales (>= 4.4.4-17), > > libgcc1-dbg-mips-cross, libgomp1-dbg-mips-cross, > > libmudflap0-dbg-mips-cross, libcloog-ppl0 (>= 0.15.9-2~), libppl-c2, libppl7 > > Description: The GNU C compiler > > This is the GNU C compiler, a fairly portable optimizing compiler for C. > > . > > This package contains C cross-compiler for mips architecture. > > Homepage: http://gcc.gnu.org/ > > > > Ok then. > > >> > >>> make distclean ; ../configure --cross-prefix=/usr/mips-linux-gnu/bin/ > >>> --cc='mips-linux-gnu-gcc-4.4' --arch=mips --target-os=linux > >>> --enable-cross-compile --disable-mipsfpu && make -j12 >& build > >>> > >>> grep 'uses soft float' build | wc > >>> 2327 24879 389225 > >>> > >>> echo 'int main(void){ return 0; }' | mips-linux-gnu-gcc-4.4 -x c - -o > >>> out.o > >>> echo 'int main(void){ return 0; }' | mips-linux-gnu-gcc-4.4 -x c - -o > >>> out.o -msoft-float > >>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > >>> Warning: out.o uses hard float, /tmp/ccFlutMG.o uses soft float > >>> > >>> > >> > >> But I don't understand how your compiler built something for hard-float > >> when the -msoft-float option should be used instead. This is what I have > >> (note that I passed V=1 to the make command): > >> > >> $ grep '\-mhard-float' build.log | wc -l > >> 0 > >> $ grep '\-msoft-float' build.log | wc -l > >> 1411 > >> $ grep "mips-linux-gnu-gcc" build.log | wc -l > >> 1411 > >> > >> So the -mhard-float option wasn't used at all, and the -msoft-float one > >> was used every time the compiler was called. > >> > >> I'm curious, can you show me your output for those same commands, please? > > > > before the patch: > > grep '\-mhard-float' build.log-V1-disable-mipsfpu | wc -l > > 0 > > > > grep '\-msoft-float' build.log-V1-disable-mipsfpu | wc -l > > 0 > > So, before the patch when you pass the --disable-mipsfpu option, what > configure does is not adding the -mhard-float option to the CFLAGS. But > also it doesn't add -msoft-float. So no float option is passed to the > compiler at all. > > Given that you don't pass any of those two options to the compiler, the > default one will be used, which I think it will be -mhard-float. > > Look at this simple test: > > $ cat test.c > int main(){return 0;} > $ # USING -mhard-float > $ mips-linux-gnu-gcc -mhard-float test.c > $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" > FP ABI: Hard float (double precision) > $ # USING -msoft-float > $ mips-linux-gnu-gcc -msoft-float test.c > $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" > FP ABI: Soft float > $ # USING COMPILER'S DEFAULT > $ mips-linux-gnu-gcc test.c > $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" > FP ABI: Hard float (double precision) > > So, as you can see, before that patch, when we were passing > --disable-mipsfpu to the configure script, we weren't building ffmpeg > for soft-float. We were actually building it for the compiler's default > floatness, which could be either soft-float or (more likely) hard-float. > > That's why you didn't see those warnings, because everything was being > built for hard-float. > > > after the patch: > > grep '\-mhard-float' build.log-V1-disable-mipsfpu-with-patch | wc -l > > 0 > > grep '\-msoft-float' build.log-V1-disable-mipsfpu-with-patch | wc -l > > 1428 > > grep "mips-linux-gnu-gcc" build.log-V1-disable-mipsfpu-with-patch | wc -l > > 1428 > > This is what doesn't make sense to me. Every time your compiler is > called it has the -msoft-float option with it, so everything it has > built was built for soft-float. > > > also forget about filtfmts, its not specifici to that > > /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > > Warning: ffprobe_g uses hard float, libavutil/libavutil.a(samplefmt.o) uses > > soft float > > /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > > Warning: ffprobe_g uses hard float, libavutil/libavutil.a(sha.o) uses soft > > float > > /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > > Warning: ffprobe_g uses hard float, libavutil/libavutil.a(sha512.o) uses > > soft float > > /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: > > Warning: ffprobe_g uses hard float, libavutil/libavutil.a(stereo3d.o) uses > > soft float > > Can you grep the output of "mips-linux-gnu-objdump -x ffprobe_g" and > search for "FP ABI" in order to see if it actually uses hard float?
before and after the patch there is no match, greping for ABI 1 .note.ABI-tag 00000020 004001a4 004001a4 000001a4 2**2 004001a4 l d .note.ABI-tag 00000000 .note.ABI-tag mips-linux-gnu-objdump -x ffprobe_g | grep 'ABI' 1 .note.ABI-tag 00000020 004001a4 004001a4 000001a4 2**2 004001a4 l d .note.ABI-tag 00000000 .note.ABI-tag also both mips-linux-gnu-objdump and the normal hosts objdump give the same result [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Those who are best at talking, realize last or never when they are wrong.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel