Mail Archives: djgpp/2012/03/14/14:28:51
On 14.3.2012 2:36, Claude Freeman wrote:
> Hello!
>
> I have a Pentium MMX CPU with around 48 MB RAM. I run Win95c, It's mostly for simple programming practice. I'm trying to use DJGPP to compile a simple hello world program in C, yet instead of a pretty program I get crash dump on my face.
>
> here is the output of all I can give you thus far.
>
> My SET environment...
>
>
> TMP=C:\WINDOWS\TEMP
> TEMP=C:\WINDOWS\TEMP
> PROMPT=$p$g
> winbootdir=C:\WINDOWS
> COMSPEC=C:\WINDOWS\COMMAND.COM
> SOUND=C:\PROGRA~1\CREATIVE\CTSND
> MIDI=SYNTH:1 MAP:E
> windir=C:\WINDOWS
> BLASTER=A220 I5 D1 H1 P330 T6
> PATH=C:\DJGPP\BIN;C:\WINDOWS;C:\WINDOWS\COMMAND
> DJGPP=c:\djgpp\djgpp.env
> CMDLINE=gcc foo.c -v
>
> The nasty crash dialog I get (there's no dump, for some unknown reason)
>
> When compiling the program with -v , I'll get some output but it's only declaring flags and whatnot:
>
> C:\REMOOD>gcc foo.c -v
> Using built-in specs.
> COLLECT_GCC=c:/djgpp/bin/gcc.exe
> COLLECT_LTO_WRAPPER=c:/djgpp/bin/../libexec/gcc/djgpp/4.62/lto-wrapper.exe
> Target: djgpp
> Configured with: /v203/gcc-4.62/configure djgpp --prefix=/dev/env/DJDIR --disable-nls --disable-werror --enable-languages=c,c++,fortran,objc,obj-c++,ada -enable-libquadmath-support
> Thread model: single
> gcc version 4.6.2 (GCC)
> COLLECT_GCC_OPTIONS='-v' '-mtune=pentium' '-march=pentium'
> c:/djgpp/bin/../libexec/gcc/djgpp/4.62/cc1.exe -quiet -v -iprefix c:/djgpp/bin/../lib/gcc/djgpp/4.62/ -remap foo.c -quiet -dumpbase foo.c -mtune=pentium -march=pentium -auxbase foo -version -o c:/djgpp/tmp/ccDUEyWn.s
> Exiting due to signal SIGILL
> Invalid Opcode at eip=007bbdc8
> eax=006153eb ebx=00ba4738 ecx=00ba4740 edx=00615779 esi=00ba4740 edi=00aa4774
> ebp=00ba474c esp=00ba4734 program=C:\DJGPP\LIBEXEC\GCC\DJGPP\4.62\CC1.EXE
> cs: sel=00ff base=8310e000 limit=00baffff
> ds: sel=0107 base=8310e000 limit=00baffff
> es: sel=0107 base=8310e000 limit=00baffff
> fs: sel=00df base=00013350 limit=0000ffff
> gs: sel=0117 base=00000000 limit=0010ffff
> ss: sel=0107 base=8310e000 limit=00baffff
> App stack: [00ba4774..00aa4774] Exceptn stack: [00aa417c..00aa223c]
>
> Call frame traceback EIPs:
> 0x007bbdc8
> 0x007a5295
> 0x0079bb17
I only verified build on Core2 where I built
(I do not have anything older). Still had
build directory on 1Tb USB drive so:
1) bfdsymify gives
C:\REMOOD>gcc foo.c -v
Using built-in specs.
COLLECT_GCC=c:/djgpp/bin/gcc.exe
COLLECT_LTO_WRAPPER=c:/djgpp/bin/../libexec/gcc/djgpp/4.62/lto-wrapper.exe
Target: djgpp
Configured with: /v203/gcc-4.62/configure djgpp --prefix=/dev/env/DJDIR
--disabl
e-nls --disable-werror --enable-languages=c,c++,fortran,objc,obj-c++,ada
-enable
-libquadmath-support
Thread model: single
gcc version 4.6.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-mtune=pentium' '-march=pentium'
c:/djgpp/bin/../libexec/gcc/djgpp/4.62/cc1.exe -quiet -v -iprefix
c:/djgpp/bin/
../lib/gcc/djgpp/4.62/ -remap foo.c -quiet -dumpbase foo.c
-mtune=pentium -march
=pentium -auxbase foo -version -o c:/djgpp/tmp/ccDUEyWn.s
Exiting due to signal SIGILL
Invalid Opcode at eip=007bbdc8
eax=006153eb ebx=00ba4738 ecx=00ba4740 edx=00615779 esi=00ba4740
edi=00aa4774
ebp=00ba474c esp=00ba4734 program=C:\DJGPP\LIBEXEC\GCC\DJGPP\4.62\CC1.EXE
cs: sel=00ff base=8310e000 limit=00baffff
ds: sel=0107 base=8310e000 limit=00baffff
es: sel=0107 base=8310e000 limit=00baffff
fs: sel=00df base=00013350 limit=0000ffff
gs: sel=0117 base=00000000 limit=0010ffff
ss: sel=0107 base=8310e000 limit=00baffff
App stack: [00ba4774..00aa4774] Exceptn stack: [00aa417c..00aa223c]
Call frame traceback EIPs:
0x007bbdc8 init_vectorized_lexer+141, file insn-recog.c
0x007a5295 __main+53, file d0008.S
0x0079bb17 __crt1_startup+143, file unwind-dw2-fde.c
From GDB one gets:
(gdb) disass init_vectorized_lexer
Dump of assembler code for function init_vectorized_lexer:
0x007bbd3b <+0>: push %ebp
0x007bbd3c <+1>: mov %esp,%ebp
0x007bbd3e <+3>: push %esi
0x007bbd3f <+4>: push %ebx
0x007bbd40 <+5>: sub $0x10,%esp
0x007bbd43 <+8>: lea -0x14(%ebp),%ebx
0x007bbd46 <+11>: lea -0x10(%ebp),%eax
0x007bbd49 <+14>: lea -0xc(%ebp),%esi
0x007bbd4c <+17>: push %esi
0x007bbd4d <+18>: mov %ebx,%ecx
0x007bbd4f <+20>: push %eax
0x007bbd50 <+21>: mov %ebx,%edx
0x007bbd52 <+23>: mov $0x1,%eax
0x007bbd57 <+28>: movl $0x0,-0x10(%ebp)
0x007bbd5e <+35>: movl $0x0,-0xc(%ebp)
0x007bbd65 <+42>: call 0x7bbcd8 <__get_cpuid>
0x007bbd6a <+47>: pop %edx
0x007bbd6b <+48>: test %eax,%eax
0x007bbd6d <+50>: pop %ecx
0x007bbd6e <+51>: je 0x7bbd9b <init_vectorized_lexer+96>
0x007bbd70 <+53>: mov $0x615855,%edx
0x007bbd75 <+58>: testb $0x10,-0xe(%ebp)
0x007bbd79 <+62>: jne 0x7bbdcb <init_vectorized_lexer+144>
---Type <return> to continue, or q <return> to quit---
0x007bbd7b <+64>: mov -0xc(%ebp),%eax
0x007bbd7e <+67>: mov $0x6157e4,%edx
0x007bbd83 <+72>: test $0x4000000,%eax
0x007bbd88 <+77>: jne 0x7bbdcb <init_vectorized_lexer+144>
0x007bbd8a <+79>: test $0x2000000,%eax
0x007bbd8f <+84>: mov $0x615779,%edx
0x007bbd94 <+89>: mov $0x6153eb,%eax
0x007bbd99 <+94>: jmp 0x7bbdc8 <init_vectorized_lexer+141>
0x007bbd9b <+96>: mov %ebx,%ecx
0x007bbd9d <+98>: mov %ebx,%edx
0x007bbd9f <+100>: mov $0x80000001,%eax
0x007bbda4 <+105>: push %esi
0x007bbda5 <+106>: push %ebx
0x007bbda6 <+107>: call 0x7bbcd8 <__get_cpuid>
0x007bbdab <+112>: pop %edx
0x007bbdac <+113>: test %eax,%eax
0x007bbdae <+115>: pop %ecx
0x007bbdaf <+116>: mov $0x6153eb,%edx
0x007bbdb4 <+121>: je 0x7bbdcb <init_vectorized_lexer+144>
0x007bbdb6 <+123>: mov -0xc(%ebp),%eax
0x007bbdb9 <+126>: and $0x408000,%eax
0x007bbdbe <+131>: cmp $0x408000,%eax
0x007bbdc3 <+136>: mov $0x615779,%eax
0x007bbdc8 <+141>: cmove %eax,%edx
---Type <return> to continue, or q <return> to quit---
0x007bbdcb <+144>: mov %edx,0x9bd110
0x007bbdd1 <+150>: lea -0x8(%ebp),%esp
0x007bbdd4 <+153>: pop %ebx
0x007bbdd5 <+154>: pop %esi
0x007bbdd6 <+155>: pop %ebp
0x007bbdd7 <+156>: ret
End of assembler dump.
(gdb)
According to http://en.wikipedia.org/wiki/X86_instruction_listings
instruction CMOVE is added in Pentium Pro, so Pentium MMX
does not have it
So it seems that specifying host machine does not seem to be sufficient
any more (even it shoud be sufficient). I had:
build=i586-pc-msdosdjgpp
host=i586-pc-msdosdjgpp
target=i586-pc-msdosdjgpp
in generated Makefile in directory gcc for stage 3.
It seems that all 4.6.X versions have the same problem (I checked
disassembler output for 4.6.0). Currently I can only suggest to
try older version (for example some 4.5.X,
4.4.X, etc). It would be nice to get
feedback about results.
Andris
- Raw text -