Technical gcc / assembler question.

Matthew Gillen me-5yx05kfkO/aqeI1yJSURBw at public.gmane.org
Thu Jul 12 11:39:36 EDT 2007


Jerry Feldman wrote:
> On Thu, 12 Jul 2007 10:23:04 -0400
> Matthew Gillen <me-5yx05kfkO/aqeI1yJSURBw at public.gmane.org> wrote:
> 
>> Jerry Feldman wrote:
>>> On Wed, 11 Jul 2007 17:24:16 -0400
>>> Jarod Wilson <jarod-ajLrJawYSntWk0Htik3J/w at public.gmane.org> wrote:
>>>
>>>> On Wednesday 11 July 2007 16:45:47 Jerry Feldman wrote:
>>>>> For reasons beyond my control, I have some code I need to compile that
>>>>> must use gcc 3.3.3. Corporate a version of GCC they keep on an exported
>>>>> system that contains all of GCC. The system I'm running on is RHEL 4.0
>>>>> x86_64 (EM64T Woodcrest) with GCC 4.3 installed.
>>>>> In any case here is the sanitized line:
>>>>> g++ -V 3.3.3
>>>>> -B<proper prefix.>
>>>>> -B<proper prefix>
>>>>> -I<prefix>/3.3.3/include
>>>>> -I<prefix>/include
>>>>> -I<prefix>/gcc-3.3.3/linux-i386-2.3/include/c++
>>>>> -I<prefix>/gcc-3.3.3/linux-i386-2.3/include/c++/i686-pc-linux-gnu
>>>>> -g -Wall -D__NO_MATH_INLINES -D__NO_STRING_INLINES -D__error_t_defined
>>>>> -fpic -fno-exceptions -I.
>>>>> -I<product>/include -fexceptions -c DefineEnums.C
>>>>> Changing -c to -S, and assembling the .s file, the error I get is:
>>>>> DefineEnums.s: Assembler messages:
>>>>> DefineEnums.s:136: Error: suffix or operands invalid for `push'
>>>>> DefineEnums.s:140: Error: suffix or operands invalid for `push'
>>>>> DefineEnums.s:145: Internal error, aborting
>>>>> at ../../gas/config/tc-i386.c line 3500 in output_imm
>>>>> (I get the identical error that references the temp file for the
>>>>> assembler pass, but the temp file code is deleted).
>>>>>
>>>>> .LFB3253:
>>>>> 	.loc 95 90 0
>>>>> 	pushl	%ebp   Line 136
>>>>> .LCFI0:
>>>>> 	movl	%esp, %ebp
>>>>> .LCFI1:
>>>>> 	pushl	%ebx   Line 140
>>>>> .LCFI2:
>>>>> 	subl	$4, %esp
>>>>> .LCFI3:
>>>>> 	call	__i686.get_pc_thunk.bx
>>>>> 	addl	$_GLOBAL_OFFSET_TABLE_, %ebx   Line 145
>>>>>
>>>>> I have tried a few options, such as -m32.
>>>> Have you tried prefixing the gcc call with 'setarch i386' ? I know this is 
>>>> required to build i686 kernels on x86_64 that actually work, could be you 
>>>> need it too.
>>> Unfortunately setarch does not make any difference. 
>>> Additionally, I compiled a simple hello.C
>>> #include <iostream>
>>> int main()
>>> {
>>> 	std::cout << "Hello, world!\n";
>>> 	return 0;
>>> }
>>>
>>> With the same result.
>> What if you set your PATH to have the gcc-3.3.3 install (with 'as' et al)
>> first, then run (no need for the -V 3.3.3).  It looks like somehow it's using
>> the wrong version of some subprogram...
> 
> The reason for the -V 3.3.3 is that the makefile is constructed that
> way. 

The PATH thing might still help, since it's looking for 'as' and it might be
finding the wrong one...but I'd imagine that '-V 3.3.3' would automatically do
that.

So you might check to make sure all the binutils (like 'as') for the 3.3.3 are
in the right place.

Matt

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.






More information about the Discuss mailing list