Re: GCC/G++ will not compile i686 binaries when asked.
That may indeed be it. Is there any known way short of looking a the
asm dump of a binary for telling what CPU instructions are used? When
asked I was directed to readelf and file and they work great for
SPARC based development, so I had assumed them to be correct for pc
development as well.
Thanks in advance for the enlightenment.
On 25 Aug 2004 at 18:23, Stefan O'Rear wrote:
> On Wed, Aug 25, 2004 at 05:48:45PM -0700, dking@pimpsoft.com wrote:
> > For the past few weeks I have been co-working on a private project. I
> > have done allot of work on it and I would hate to have to start over.
> >
> > The makefile I created for this project explicitly tells the compiler
> > (g++) to compile the binary using i686 (-march=pentiumpro) assembly
> > instructions and internal timeings. Yet for some [explitive]
> > [explitive] reason it refuses to do so and both ?file? amd ?readelf?
> > tell me it always compiles for a bare i386 despite my explicit
> > commands otherwise.
> >
> > Two questions:
> > Why the [explitive] does this [explitive] thing not compile the end
> > result into a i686 only binary as I asked it to?
> > How the [explitive] do I fix it?
> >
> > I have read the gcc/g++ manual pages. I have googled. I have spent
> > the past hour dedicating myself to this problem, and nothing seems to
> > work.
> >
> > This is [b]really[/b] getting to me. Please help.
>
> C file:
>
> int main(int argc) {
> int sam = 0;
> if (argc > 1) sam = argc;
> return sam;
> }
>
> Compile:
>
> ~ %% gcc -o testC test.c -mcpu=pentiumpro -march=pentiumpro -O3
>
> Dissassembly Excerpt:
>
> 08048320 <main>:
> 8048320: 55 push %ebp
> 8048321: 31 c0 xor %eax,%eax
> 8048323: 89 e5 mov %esp,%ebp
> 8048325: 83 ec 08 sub $0x8,%esp
> 8048328: 8b 4d 08 mov 0x8(%ebp),%ecx
> 804832b: 83 e4 f0 and $0xfffffff0,%esp
> 804832e: 83 f9 02 cmp $0x2,%ecx
> 8048331: 0f 4d c1 cmovge %ecx,%eax
> 8048334: 89 ec mov %ebp,%esp
> 8048336: 5d pop %ebp
> 8048337: c3 ret
>
> See that cmovge - that's a Pentium ONLY insn.
>
> And readelf says:
> Machine: Intel 80386
>
> Is that ^^^ why you thing gcc won't make 686 programs?
>
>
> 1. A PPro exec is the same as a 386 exec except for the insns. ReadELF
> will tell you it's a 386 exec even if you have a PPro exec.
>
> Please comment. If it doesn't have 686 asm and could benefit from it, we
> (atleast I) need more info.
>
> P.S. I use woody with a GCC-3.3 from unstable and the ness. libs.
>
>
> --
> To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
>
>
Reply to: