[MPlayer-dev-eng] [PATCH] Fix MPlayer to compile on Solaris

Alex Viskovatoff viskovatoff at imap.cc
Sat Jul 18 22:39:16 CEST 2009


Diego and Milan,

Milan Jurik wrote:
> Diego,
> 
> Diego Biurrun píše v so 18. 07. 2009 v 13:59 +0200:
>> On Fri, Jul 17, 2009 at 01:43:15PM -0400, Alex Viskovatoff wrote:
>>> Diego Biurrun wrote:
>>>> On Sun, Jul 12, 2009 at 04:05:08PM -0400, Alex Viskovatoff wrote:
>>>>> For some time now, trying to compile MPlayer produces the following error:
>>>>>
>>>>> gcc-4.3.2 -DHAVE_AV_CONFIG_H -I.. -I.. -Wundef -Wdisabled-optimization 
>>>>> -Wno-pointer-sign -Wdeclaration-after-statement -std=gnu99 -Wall 
>>>>> -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -march=native 
>>>>> -mtune=native -pipe -ffast-math -fomit-frame-pointer -D_LARGEFILE_SOURCE 
>>>>> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -Ilibdvdread4 -I. 
>>>>> -I/usr/X11/include -I/usr/include/SDL  -D_REENTRANT 
>>>>> -I/usr/include/freetype2 -I/usr/include     -c -o x86/mlpdsp.o 
>>>>> x86/mlpdsp.c
>>>>> {standard input}: Assembler messages:
>>>>> {standard input}:70: Error: unbalanced parenthesis in operand 1.
>>>>> {standard input}:75: Error: unbalanced parenthesis in operand 1.
>>>>> {standard input}:80: Error: unbalanced parenthesis in operand 1.
>>>>> {standard input}:85: Error: unbalanced parenthesis in operand 1.
>>>>> {standard input}:102: Error: unbalanced parenthesis in operand 2.
>>>>> gmake[1]: *** [x86/mlpdsp.o] Error 1
>>>>> gmake[1]: Leaving directory 
>>>>> `/export/home/av/Download/software/src/mplayer/libavcodec'
>>>>> gmake: *** [libavcodec/libavcodec.a] Error 2
>>>>>
>>>>> The offending lines are like this:
>>>>>
>>>>>    mov   0x0c+4*(8 + (40 * (192000 / 48000)))(%ebp), %eax
>>>>>
>>>>> The error is produced because for some kind of compatibility reason, 
>>>>> unlike the Linux GAS, the Solaris GAS interprets slashes as starting a 
>>>>> comment. To avoid this behavior, the option "--divide" must be passed to 
>>>>> the assembler.
>>>>>
>>>>> The patch adds to configure a test for "sunos", and adds "-Wa,--divide" 
>>>>> to extra_cflags in that case.
>>>> Hmm, I wonder why FFmpeg does not have this flag.  Do you have the same
>>>> problem when compiling FFmpeg?
>>> I never tried compiling FFmpeg until just now, but yes, I have the same 
>>> problem with it:
>>>
>>> gcc-4.3.2 -DHAVE_AV_CONFIG_H -I. 
>>> -I"/export/home/av/Download/software/src/ffmpeg" -D_ISOC99_SOURCE 
>>> -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
>>> -D__EXTENSIONS__ -std=c99 -fomit-frame-pointer -g 
>>> -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization 
>>> -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual 
>>> -Wwrite-strings -Wtype-limits -Wundef -O3 -fno-math-errno 
>>> -fno-signed-zeros -fno-tree-vectorize        -c -o 
>>> libavcodec/x86/mlpdsp.o libavcodec/x86/mlpdsp.c
>>> /var/tmp//ccvjaO6o.s: Assembler messages:
>>> /var/tmp//ccvjaO6o.s:96: Error: unbalanced parenthesis in operand 1.
>>> /var/tmp//ccvjaO6o.s:101: Error: unbalanced parenthesis in operand 1.
>>> /var/tmp//ccvjaO6o.s:106: Error: unbalanced parenthesis in operand 1.
>>> /var/tmp//ccvjaO6o.s:111: Error: unbalanced parenthesis in operand 1.
>>> /var/tmp//ccvjaO6o.s:128: Error: unbalanced parenthesis in operand 2.
>>> gmake: *** [libavcodec/x86/mlpdsp.o] Error 1
>> Please be more detailed.  We have an OpenSolaris x86_32 test machines
>> running in FATE that works flawlessly:
>>
>> http://fate.multimedia.cx/
>> http://fate.multimedia.cx/index.php?machine=19
>> http://fate.multimedia.cx/index.php?build_record=98524
>>
>> However, it is running gcc 3.4.3, not 4.3.2...
>>
> 
> How fresh is your testbed? I think it started when binutils were
> upgraded to the latest in OpenSolaris (around build 116) and at aprox.
> the same time this code was introduced to ffmpeg.
> 
> Best regards,
> 
> Milan

The same thing happens with gcc 3.4.3. The problem is with the GNU
assembler, called "gas" in OpenSolaris. (Actually, /usr/bin/gas is a 
symbolic link to /usr/gnu/bin/as.) A simple test program shows
what's going on:

av at diotima:~$ cat test.s
cmpl $(100/4), %eax
av at diotima:~$ gas test.s
test.s: Assembler messages:
test.s:1: Error: unbalanced parenthesis in operand 1.
av at diotima:~$ gas --divide test.s
av at diotima:~$

I believe that why gas has this behavior is to make it behave like Sun's as:

av at diotima:~$ as test.s
Assembler:
	"test.s", line 1 : Syntax error
	Near line: "cmpl $(100/4), %eax"
av at diotima:~$

According to Solaris x86 assembly language syntax, comments start with
slashes: http://docs.sun.com/app/docs/doc/817-5477/ennab?a=view

I think that Milan is probably right that your testbed is not that 
fresh. gas that is included in the current official release of 
OpenSolaris, 2009.06 (snv_111b) produces this error. (I've been building 
mplayer on the current development release of OpenSolaris, snv_118.)

Best regards,
Alex



More information about the MPlayer-dev-eng mailing list