Message-ID: <3B370008.4080505@ujf-grenoble.fr> Date: Mon, 25 Jun 2001 11:10:32 +0200 From: Maurice Lombardi User-Agent: Mozilla/5.0 (Windows; U; Win98; fr-FR; m18) Gecko/20010131 Netscape6/6.01 X-Accept-Language: fr,it,en MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp To: djgpp AT delorie DOT com CC: binutils AT sources DOT redhat DOT com Subject: Re: bug when upgrading bnu210->bnu211 ? References: <3B34F342 DOT 2020704 AT ujf-grenoble DOT fr> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Reply-To: djgpp AT delorie DOT com Mark E. wrote: > On Sat, 23 Jun 2001 21:51:30 +0200, you wrote: > > >> C:\djgpp\b\gnu\gcc-2.953\gcc\p\test>gpc -g -O3 --autobuild fay.pas >> c:/djgpp/tmp\ccdaaaaa: Assembler messages: >> c:/djgpp/tmp\ccdaaaaa:934: Fatal error: C_EFCN symbol out of scope > > > Please post the assembly file generated by compiling fay.pas (in other words use -S > and then post fay.s) and we'll be in a better position to help you. It's possible > binutils 2.11 is catching an problem with gpc, or it's possible that binutils 2.11 is > the problem. But from the information you've provided so far, it's impossible to > tell. > > Mark Here it is, compiled with gpc -g -S -O3 fay.pas --------------------------------------------------------------------------------------- .text .def _.0fake; .scl 10; .type 010; .size 12; .endef .def _Capacity; .val 0; .scl 8; .type 016; .endef .def _length; .val 4; .scl 8; .type 016; .endef .def __p_schema_; .val 8; .scl 8; .dim 1; .size 1; .type 060; .endef .def .eos; .val 12; .scl 102; .tag _.0fake; .size 12; .endef .def _.1fake; .scl 10; .type 010; .size 36; .endef .def _Datevalid; .val 0; .scl 8; .type 014; .endef .def _Timevalid; .val 1; .scl 8; .type 014; .endef .def _Year; .val 4; .scl 8; .type 04; .endef .def _Month; .val 8; .scl 8; .type 04; .endef .def _Day; .val 12; .scl 8; .type 04; .endef .def _Dayofweek; .val 16; .scl 8; .type 04; .endef .def _Hour; .val 20; .scl 8; .type 04; .endef .def _Minute; .val 24; .scl 8; .type 04; .endef .def _Second; .val 28; .scl 8; .type 04; .endef .def _Microsecond; .val 32; .scl 8; .type 04; .endef .def .eos; .val 36; .scl 102; .tag _.1fake; .size 36; .endef .def _.2fake; .scl 10; .type 010; .size 2060; .endef .def _Capacity; .val 0; .scl 8; .type 016; .endef .def _length; .val 4; .scl 8; .type 016; .endef .def __p_schema_; .val 8; .scl 8; .dim 2049; .size 2049; .type 060; .endef .def .eos; .val 2060; .scl 102; .tag _.2fake; .size 2060; .endef .def _.3fake; .scl 10; .type 010; .size 2140; .endef .def _Bound; .val 0; .scl 8; .type 014; .endef .def _Force; .val 1; .scl 8; .type 014; .endef .def _Extensions_valid; .val 2; .scl 8; .type 014; .endef .def _Readable; .val 3; .scl 8; .type 014; .endef .def _Writable; .val 4; .scl 8; .type 014; .endef .def _Executable; .val 5; .scl 8; .type 014; .endef .def _Existing; .val 6; .scl 8; .type 014; .endef .def _Directory; .val 7; .scl 8; .type 014; .endef .def _Special; .val 8; .scl 8; .type 014; .endef .def _Symlink; .val 9; .scl 8; .type 014; .endef .def _Size; .val 12; .scl 8; .type 05; .endef .def _Accesstime; .val 20; .scl 8; .type 05; .endef .def _Modificationtime; .val 28; .scl 8; .type 05; .endef .def _Changetime; .val 36; .scl 8; .type 05; .endef .def _User; .val 44; .scl 8; .type 04; .endef .def _Group; .val 48; .scl 8; .type 04; .endef .def _Mode; .val 52; .scl 8; .type 04; .endef .def _Device; .val 56; .scl 8; .type 04; .endef .def _Inode; .val 60; .scl 8; .type 04; .endef .def _Links; .val 64; .scl 8; .type 04; .endef .def _Textbinary; .val 68; .scl 8; .type 014; .endef .def _Handle; .val 72; .scl 8; .type 04; .endef .def _Closeflag; .val 76; .scl 8; .type 014; .endef .def _Name; .val 80; .scl 8; .tag _.2fake; .size 2060; .type 010; .endef .def .eos; .val 2140; .scl 102; .tag _.3fake; .size 2140; .endef .file "fay.pas" gcc2_compiled.: ___gnu_compiled_pascal: .def _Integer; .scl 13; .type 04; .endef .def _Node; .scl 13; .type 016; .endef .def _Debug; .val _Debug; .scl 3; .type 014; .endef .lcomm _Debug,4 LC0: .ascii " to TakeUSCC\0" LC1: .ascii "YieldUSCC passes\0" LC2: .ascii "stacking \0" LC3: .ascii "Doing successors of \0" LC4: .ascii " is an SCC root\0" LC5: .ascii "Now checking if \0" LC6: .ascii " T=\0" LC7: .ascii " is an SCC root; SP=\0" LC8: .ascii " out to TakeUSCC\0" LC9: .ascii "Yield SCC should pass \0" .p2align 2 .def _Dousuccessor; .val _Dousuccessor.8; .scl 3; .type 041; .endef _Dousuccessor.8: .def .bf; .val .; .scl 101; .line 45; .endef .def _W; .val 8; .scl 9; .type 016; .endef .def _W; .val 7; .scl 4; .type 016; .endef pushl %ebp movl %esp,%ebp subl $12,%esp pushl %edi pushl %esi pushl %ebx movl 8(%ebp),%edi movl %ecx,-4(%ebp) movl %ecx,%esi .ln 2 addl $-12,%esp .ln 1 movl -4(%esi),%ebx .ln 2 pushl %edi movl %ebx,%ecx call _Search.5 .ln 3 movl -8(%esi),%eax addl $16,%esp movl -18008(%ebx),%edx movl (%eax),%eax movl (%edx,%edi,4),%ecx cmpl (%edx,%eax,4),%ecx jge L6 movl %ecx,(%edx,%eax,4) L6: .ln 4 movl -18012(%ebx),%edx addl $-8,%esp pushl %edi movl -8(%esi),%eax movl (%eax),%eax pushl %eax movl 12(%edx),%eax call *%eax leal -24(%ebp),%esp popl %ebx popl %esi popl %edi movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 4; .endef .def _Dousuccessor; .val .; .scl -1; .endef .p2align 2 .def _Eachumember; .val _Eachumember.11; .scl 3; .type 041; .endef _Eachumember.11: .def .bf; .val .; .scl 101; .line 53; .endef .def _P; .val 8; .scl 9; .type 0221; .endef .def _I; .val 3; .scl 4; .type 04; .endef .def .bb; .val .; .scl 100; .line 1; .endef .def ___for_lower_0__; .val 2; .scl 4; .type 04; .endef .def ___for_upper_1__; .val 7; .scl 4; .type 04; .endef pushl %ebp movl %esp,%ebp subl $12,%esp pushl %edi pushl %esi pushl %ebx movl %ecx,-4(%ebp) movl -4(%ecx),%eax .ln 2 movl -12(%ecx),%edi movl -18016(%eax),%edx cmpl %edi,%edx jl L8 movl %edx,%ebx leal -18004(%eax),%esi jmp L9 .p2align 4,,7 L12: decl %ebx L9: .ln 3 movl (%esi,%ebx,4),%eax addl $-12,%esp pushl %eax movl 8(%ebp),%eax call *%eax .ln 2 addl $16,%esp cmpl %edi,%ebx jg L12 L8: leal -24(%ebp),%esp popl %ebx popl %esi popl %edi movl %ebp,%esp popl %ebp ret .ln 4 .def .eb; .val .; .scl 100; .line 4; .endef .def .ef; .val .; .scl 101; .line 4; .endef .def _Eachumember; .val .; .scl -1; .endef .p2align 2 .def _Search; .val _Search.5; .scl 3; .type 041; .endef _Search.5: .def .bf; .val .; .scl 101; .line 43; .endef .def _V; .val 8; .scl 9; .type 016; .endef .def _I; .val 3; .scl 4; .type 04; .endef .def _T; .val -12; .scl 1; .type 04; .endef pushl %ebp movl %esp,%ebp subl $60,%esp leal 8(%ebp),%eax movl $_Dousuccessor.8-10,%edx pushl %edi pushl %esi pushl %ebx movl %ecx,-4(%ebp) movl %ecx,-48(%ebp) movl %eax,-8(%ebp) leal -44(%ebp),%eax movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -28(%ebp),%eax movl $_Eachumember.11-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) .ln 23 movl -48(%ebp),%ecx movl 8(%ebp),%edx movl -18008(%ecx),%eax cmpl $0,(%eax,%edx,4) jne L17 .def .bb; .val .; .scl 100; .line 23; .endef .ln 24 cmpb $0,_Debug je L18 addl $-12,%esp pushl $22 pushl %edx pushl $8 pushl $9 pushl $LC2 pushl $17 pushl $3 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L18 call __p_check_inoutres L18: .ln 25 movl -48(%ebp),%esi .ln 26 movl %esi,%ebx addl $-18004,%ebx .ln 27 movl %ebx,%edi .ln 25 movl -18016(%esi),%eax incl %eax movl %eax,-18016(%esi) .ln 26 movl 8(%ebp),%ecx movl %ecx,(%ebx,%eax,4) movl -18008(%esi),%edx movl -18016(%esi),%eax movl %eax,(%edx,%ecx,4) .ln 27 cmpb $0,_Debug je L20 addl $-12,%esp pushl $22 movl 8(%ebp),%eax pushl %eax pushl $8 pushl $20 pushl $LC3 pushl $17 pushl $3 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L20 call __p_check_inoutres L20: .ln 28 movl -48(%ebp),%eax addl $-8,%esp movl -18012(%eax),%edx leal -41(%ebp),%eax andb $252,%al pushl %eax movl 8(%ebp),%eax pushl %eax movl 8(%edx),%eax call *%eax .ln 29 addl $16,%esp cmpb $0,_Debug je L22 pushl $22 pushl $15 pushl $LC4 pushl $17 movl 8(%ebp),%eax pushl %eax pushl $8 pushl $16 pushl $LC5 pushl $17 pushl $4 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L22 call __p_check_inoutres L22: .ln 30 movl -48(%ebp),%ecx movl 8(%ebp),%edx movl -18008(%ecx),%eax movl (%eax,%edx,4),%eax cmpl (%edi,%eax,4),%edx jne L17 .def .bb; .val .; .scl 100; .line 30; .endef .def ___for_lower_2__; .val 0; .scl 4; .type 04; .endef .def ___for_upper_3__; .val 6; .scl 4; .type 04; .endef .ln 31 movl %eax,-12(%ebp) .ln 32 cmpb $0,_Debug je L25 pushl $22 pushl %eax pushl $3 pushl $3 pushl $LC6 pushl $17 movl -18016(%ecx),%eax pushl %eax pushl $3 pushl $20 pushl $LC7 pushl $17 pushl %edx pushl $8 pushl $6 pushl $384 pushl $__p_stdout call __p_write addl $64,%esp cmpl $0,__p_InOutRes je L25 call __p_check_inoutres L25: .ln 33 movl -48(%ebp),%esi movl -18016(%esi),%eax movl -12(%ebp),%esi cmpl %esi,%eax jl L27 movl %eax,%ebx movl %edi,-52(%ebp) jmp L28 .p2align 4,,7 L31: decl %ebx L28: movl -52(%ebp),%edi movl -48(%ebp),%eax movl (%edi,%ebx,4),%ecx movl -18008(%eax),%edx movl -18020(%eax),%eax movl %eax,(%edx,%ecx,4) cmpl %esi,%ebx jg L31 L27: .ln 34 movl -48(%ebp),%edx movl -12(%ebp),%eax cmpl %eax,-18016(%edx) je L33 .ln 35 cmpb $0,_Debug je L34 pushl $22 pushl $16 pushl $LC8 pushl $17 movl 8(%ebp),%eax pushl %eax pushl $8 pushl $22 pushl $LC9 pushl $17 pushl $4 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L34 call __p_check_inoutres L34: .ln 17 .def .bb; .val .; .scl 100; .line 17; .endef .def .bb; .val .; .scl 100; .line 17; .endef .def .bb; .val .; .scl 100; .line 17; .endef movl -4(%ebp),%esi movl %ebp,%ebx .ln 18 cmpb $0,_Debug je L36 pushl $22 pushl $12 pushl $LC0 pushl $17 movl -8(%ebp),%eax movl (%eax),%eax pushl %eax pushl $8 pushl $16 pushl $LC1 pushl $17 pushl $4 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L36 call __p_check_inoutres L36: .ln 19 movl -18012(%esi),%edx addl $-8,%esp leal -28(%ebx),%eax pushl %eax movl -8(%ebx),%eax movl (%eax),%eax pushl %eax movl 16(%edx),%eax call *%eax .ln 20 .def .eb; .val .; .scl 100; .line 20; .endef .def .eb; .val .; .scl 100; .line 20; .endef .def .eb; .val .; .scl 100; .line 20; .endef L33: .ln 38 movl -12(%ebp),%esi movl -48(%ebp),%ecx decl %esi movl %esi,-18016(%ecx) .ln 39 .def .eb; .val .; .scl 100; .line 39; .endef .ln 40 .def .eb; .val .; .scl 100; .line 40; .endef L17: leal -72(%ebp),%esp popl %ebx popl %esi popl %edi movl %ebp,%esp popl %ebp ret .ln 41 .def .ef; .val .; .scl 101; .line 41; .endef .def _Search; .val .; .scl -1; .endef .p2align 2 .def _P; .val _P.2; .scl 3; .type 041; .endef _P.2: .def .bf; .val .; .scl 101; .line 40; .endef .def _T; .val 8; .scl 9; .type 016; .endef .def _T; .val 2; .scl 4; .type 016; .endef pushl %ebp movl %esp,%ebp subl $24,%esp movl 8(%ebp),%edx movl %ecx,-4(%ebp) movl -18008(%ecx),%eax movl $0,(%eax,%edx,4) movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _P; .val .; .scl -1; .endef .p2align 2 .def _Eachuscc; .val _Eachuscc; .scl 2; .type 041; .endef .globl _Eachuscc _Eachuscc: .def .bf; .val .; .scl 101; .line 34; .endef .def _Eachunode; .val 8; .scl 9; .type 0221; .endef .def _Eachunodeutousearch; .val 12; .scl 9; .type 0221; .endef .def _R; .val 16; .scl 9; .type 0221; .endef .def _Propagate; .val 20; .scl 9; .type 0221; .endef .def _Takeuscc; .val 24; .scl 9; .type 0221; .endef .def _Lastunode; .val 28; .scl 9; .type 04; .endef .def _Eachunode; .val 3; .scl 4; .type 0221; .endef .def _Eachunodeutousearch; .val 6; .scl 4; .type 0221; .endef .def _Lastunode; .val 1; .scl 4; .type 04; .endef .def _A; .scl 13; .dim 4501; .size 18004; .type 064; .endef .def _N; .val -18008; .scl 1; .dim 4501; .size 4; .type 0324; .endef .def _Sp; .val -18016; .scl 1; .type 04; .endef .def _Stack; .val -18004; .scl 1; .dim 4501; .size 18004; .type 076; .endef .def _Infinity; .val -18020; .scl 1; .type 04; .endef pushl %ebp movl %esp,%ebp subl $18064,%esp leal 8(%ebp),%eax movl $_Search.5-10,%edx pushl %esi pushl %ebx movl 8(%ebp),%ebx movl 12(%ebp),%esi movl 28(%ebp),%ecx movl %eax,-18012(%ebp) leal -18052(%ebp),%eax movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -18036(%ebp),%eax movl $_P.2-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) .ln 52 incl %ecx movl %ecx,-18020(%ebp) addl $-12,%esp pushl $18004 call __p_new movl %eax,-18008(%ebp) .ln 53 addl $-12,%esp leal -18036(%ebp),%eax pushl %eax call *%ebx .ln 54 movl $0,-18016(%ebp) .ln 55 addl $32,%esp addl $-12,%esp leal -18052(%ebp),%eax pushl %eax call *%esi .ln 56 movl -18008(%ebp),%eax addl $-12,%esp pushl %eax call __p_dispose leal -18072(%ebp),%esp popl %ebx popl %esi movl %ebp,%esp popl %ebp ret .ln 57 .def .ef; .val .; .scl 101; .line 57; .endef .def _Eachuscc; .val .; .scl -1; .endef LC10: .ascii " from YieldUSCC\0" LC11: .ascii "TakeUSCC receives V=\0" LC12: .ascii "The SCC's constituents are:\0" .p2align 2 .def _P; .val _P.37; .scl 3; .type 041; .endef _P.37: .def .bf; .val .; .scl 101; .line 112; .endef .def _T; .val 8; .scl 9; .type 016; .endef .def _T; .val 0; .scl 4; .type 016; .endef .def .bb; .val .; .scl 100; .line 1; .endef pushl %ebp movl %esp,%ebp subl $24,%esp movl 8(%ebp),%eax movl %ecx,-4(%ebp) addl $-12,%esp pushl %eax pushl $8 pushl $1 pushl $384 pushl $__p_stdout call __p_write addl $32,%esp cmpl $0,__p_InOutRes je L52 call __p_check_inoutres L52: movl %ebp,%esp popl %ebp ret .def .eb; .val .; .scl 100; .line 1; .endef .def .ef; .val .; .scl 101; .line 1; .endef .def _P; .val .; .scl -1; .endef .p2align 2 .def _Takeuscc; .val _Takeuscc.34; .scl 3; .type 041; .endef _Takeuscc.34: .def .bf; .val .; .scl 101; .line 112; .endef .def _Root; .val 8; .scl 9; .type 016; .endef .def _Each; .val 12; .scl 9; .type 0221; .endef .def _Root; .val 0; .scl 4; .type 016; .endef .def _Each; .val 3; .scl 4; .type 0221; .endef .def .bb; .val .; .scl 100; .line 1; .endef pushl %ebp movl %esp,%ebp subl $36,%esp leal -20(%ebp),%edx pushl %ebx movl 8(%ebp),%eax movl 12(%ebp),%ebx movl %ecx,-4(%ebp) movl $_P.37-10,%ecx movb $185,(%edx) movl %ebp,1(%edx) movb $233,5(%edx) subl %edx,%ecx movl %ecx,6(%edx) .ln 3 pushl $22 pushl $15 pushl $LC10 pushl $17 pushl %eax pushl $8 pushl $20 pushl $LC11 pushl $17 pushl $4 pushl $384 pushl $__p_stdout call __p_write addl $48,%esp cmpl $0,__p_InOutRes je L53 call __p_check_inoutres L53: .ln 4 addl $-4,%esp pushl $22 pushl $27 pushl $LC12 pushl $17 pushl $2 pushl $384 pushl $__p_stdout call __p_write addl $32,%esp cmpl $0,__p_InOutRes je L54 call __p_check_inoutres L54: .ln 5 addl $-12,%esp leal -17(%ebp),%eax andb $252,%al pushl %eax call *%ebx pushl $22 pushl $1 pushl $384 pushl $__p_stdout call __p_write addl $32,%esp cmpl $0,__p_InOutRes je L55 call __p_check_inoutres L55: movl -40(%ebp),%ebx movl %ebp,%esp popl %ebp ret .ln 6 .def .eb; .val .; .scl 100; .line 6; .endef .def .ef; .val .; .scl 101; .line 6; .endef .def _Takeuscc; .val .; .scl -1; .endef .p2align 2 .def _Eachunodeutousearch; .val _Eachunodeutousearch.22; .scl 3; .type 041; .endef _Eachunodeutousearch.22: .def .bf; .val .; .scl 101; .line 95; .endef .def _Search; .val 8; .scl 9; .type 0221; .endef .def _Search; .val 0; .scl 4; .type 0221; .endef pushl %ebp movl %esp,%ebp subl $24,%esp movl 8(%ebp),%eax movl %ecx,-4(%ebp) .ln 2 addl $-12,%esp pushl $1 call *%eax movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 2; .endef .def _Eachunodeutousearch; .val .; .scl -1; .endef .p2align 2 .def _Eachunode; .val _Eachunode.25; .scl 3; .type 041; .endef _Eachunode.25: .def .bf; .val .; .scl 101; .line 99; .endef .def _P; .val 8; .scl 9; .type 0221; .endef .def _P; .val 3; .scl 4; .type 0221; .endef pushl %ebp movl %esp,%ebp subl $20,%esp pushl %ebx movl 8(%ebp),%ebx movl %ecx,-4(%ebp) addl $-12,%esp pushl $1 call *%ebx addl $-12,%esp pushl $2 call *%ebx movl -24(%ebp),%ebx movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _Eachunode; .val .; .scl -1; .endef .p2align 2 .def _R; .val _R.28; .scl 3; .type 041; .endef _R.28: .def .bf; .val .; .scl 101; .line 102; .endef .def _V; .val 8; .scl 9; .type 016; .endef .def _P; .val 12; .scl 9; .type 0221; .endef .def _V; .val 0; .scl 4; .type 016; .endef .def _P; .val 2; .scl 4; .type 0221; .endef pushl %ebp movl %esp,%ebp subl $24,%esp movl 8(%ebp),%eax movl 12(%ebp),%edx movl %ecx,-4(%ebp) cmpl $1,%eax je L45 cmpl $2,%eax je L46 jmp L44 .p2align 4,,7 L45: .ln 5 addl $-12,%esp pushl $2 call *%edx jmp L44 .p2align 4,,7 L46: .ln 6 addl $-12,%esp pushl $1 call *%edx .def _case_4; .val L44; .scl 6; .type 00; .endef L44: movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 6; .endef .def _R; .val .; .scl -1; .endef .p2align 2 .def _Propagate; .val _Propagate.31; .scl 3; .type 041; .endef _Propagate.31: .def .bf; .val .; .scl 101; .line 110; .endef .def _V; .val 8; .scl 9; .type 016; .endef .def _W; .val 12; .scl 9; .type 016; .endef pushl %ebp movl %esp,%ebp subl $24,%esp movl %ecx,-4(%ebp) movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _Propagate; .val .; .scl -1; .endef .p2align 2 .def _Q; .val _Q.19; .scl 3; .type 041; .endef _Q.19: .def .bf; .val .; .scl 101; .line 94; .endef pushl %ebp movl %esp,%ebp subl $104,%esp movl %ecx,-4(%ebp) leal -84(%ebp),%eax movl $_Eachunode.25-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -68(%ebp),%eax movl $_Eachunodeutousearch.22-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -52(%ebp),%eax movl $_R.28-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -36(%ebp),%eax movl $_Propagate.31-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) leal -20(%ebp),%eax movl $_Takeuscc.34-10,%edx movb $185,(%eax) movl %ebp,1(%eax) movb $233,5(%eax) subl %eax,%edx movl %edx,6(%eax) .ln 26 addl $-8,%esp pushl $2 pushl %eax leal -36(%ebp),%eax pushl %eax leal -52(%ebp),%eax pushl %eax leal -68(%ebp),%eax pushl %eax leal -84(%ebp),%eax pushl %eax call _Eachuscc movl %ebp,%esp popl %ebp ret .ln 27 .def .ef; .val .; .scl 101; .line 27; .endef .def _Q; .val .; .scl -1; .endef .p2align 2 .def _Outer; .val _Outer; .scl 2; .type 041; .endef .globl _Outer _Outer: .def .bf; .val .; .scl 101; .line 93; .endef .def .bb; .val .; .scl 100; .line 1; .endef pushl %ebp movl %esp,%ebp subl $8,%esp .ln 32 movl %ebp,%ecx call _Q.19 movl %ebp,%esp popl %ebp ret .ln 33 .def .eb; .val .; .scl 100; .line 33; .endef .ln 37 .def .ef; .val .; .scl 101; .line 37; .endef .def _Outer; .val .; .scl -1; .endef .p2align 2 .def _pascal_main_program; .val _pascal_main_program; .scl 2; .type 041; .endef .globl _pascal_main_program _pascal_main_program: .def .bf; .val .; .scl 101; .line 131; .endef pushl %ebp movl %esp,%ebp subl $8,%esp .ln 2 movb $1,_Debug .ln 3 call _Outer movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 3; .endef .def _pascal_main_program; .val .; .scl -1; .endef .data _ctor_run_condition_5.47: .byte 1 .text .p2align 2 .def _init_pascal_main_program; .val _init_pascal_main_program; .scl 2; .type 041; .endef .globl _init_pascal_main_program _init_pascal_main_program: .def .bf; .val .; .scl 101; .line 134; .endef .def _ctor_run_condition_5; .val _ctor_run_condition_5.47; .scl 3; .type 014; .endef pushl %ebp movl %esp,%ebp subl $8,%esp cmpb $0,_ctor_run_condition_5.47 je L60 movb $0,_ctor_run_condition_5.47 addl $-12,%esp pushl $_fini_pascal_main_program call __p_atexit L60: movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _init_pascal_main_program; .val .; .scl -1; .endef .p2align 2 .def _fini_pascal_main_program; .val _fini_pascal_main_program; .scl 2; .type 041; .endef .globl _fini_pascal_main_program _fini_pascal_main_program: .def .bf; .val .; .scl 101; .line 134; .endef pushl %ebp movl %esp,%ebp movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _fini_pascal_main_program; .val .; .scl -1; .endef .p2align 2 .def _main; .val _main; .scl 2; .type 044; .endef .globl _main _main: .def .bf; .val .; .scl 101; .line 134; .endef .def _argc; .val 8; .scl 9; .type 04; .endef .def _argv; .val 12; .scl 9; .type 0120; .endef .def _envp; .val 16; .scl 9; .type 0120; .endef .def _argc; .val 1; .scl 4; .type 04; .endef .def _argv; .val 2; .scl 4; .type 0120; .endef .def _envp; .val 0; .scl 4; .type 0120; .endef pushl %ebp movl %esp,%ebp subl $8,%esp movl 8(%ebp),%ecx movl 12(%ebp),%edx movl 16(%ebp),%eax addl $-4,%esp pushl %eax pushl %edx pushl %ecx call __p_initialize call _init_pascal_main_program call _pascal_main_program call __p_finalize xorl %eax,%eax movl %ebp,%esp popl %ebp ret .def .ef; .val .; .scl 101; .line 1; .endef .def _main; .val .; .scl -1; .endef ------------------------------------------------------------------------------------ For reference here is fay.pas (comments deleted at begin and end) ------------------------------------------------------------------------------------- program fay(output); type integer = -32767..32768; node = 0..4500; var Debug: boolean; procedure EachUSCC( { of relation R } { Pass in an iterator to generate the nodes to be searched, the relation on the nodes, a procedure to do information propagation when V R W is discovered, a procedure to take each SCC found, and a procedure to yield each node in the graph. We require that the nodes be of a scalar type so that an array may be indexed by them. Also passed in is the upper bound of the node type. } procedure EachUnode(procedure P(T:node)); { Yields each node in graph } procedure EachUnodeUtoUsearch(procedure SearchU(V:node)); procedure R(V:node; procedure DoUsuccessor(W:node)); procedure Propagate(V,W:node); { called when V R W is discovered } procedure TakeUSCC(Root:node; procedure Each(procedure P(T:node))); LastUnode: integer ); type A = array[node] of integer; { range 0..Infinity (below) } var N: ^A; SP: integer; Stack: array[node {1..LastUnode}] of node; Infinity: integer; { LastUnode+1 } procedure P(T:node); begin N^[T] := 0; end; procedure Search(V:node); var I,T:integer; procedure DoUsuccessor(W:node); begin Search(W); if N^[W] < N^[V] then N^[V] := N^[W]; Propagate(V,W); end; { EachUmember is yielded by EachUSCC when an SCC has been found. } procedure EachUmember(procedure P(TU:node)); var I:integer; begin { yield each member of current SCC } for I := SP downto T do P(Stack[I]); end; procedure YieldUSCC; begin if Debug then writeln('YieldUSCC passes',V,' to TakeUSCC'); TakeUSCC(V,EachUmember); end; begin if N^[V] = 0 then begin { stack the node } if Debug then writeln('stacking ',V); SP := SP+1; Stack[SP] := V; N^[V] := SP; if Debug then writeln('Doing successors of ',V); R(V,DoUsuccessor); if Debug then writeln('Now checking if ',V,' is an SCC root'); if V = Stack[N^[V]] then begin { V is root of an SCC } T := N^[V]; if Debug then writeln(V,' is an SCC root; SP=',SP,' T=',T); for I := SP downto T do N^[Stack[I]] := Infinity; if SP <> T then begin if Debug then writeln('Yield SCC should pass ',V,' out to TakeUSCC'); YieldUSCC; end; SP := T-1; end; end; end; begin Infinity := LastUnode+1; new(N); EachUnode(P); SP := 0; EachUnodeUtoUsearch(Search); dispose(N); end; procedure Outer; { needed to produce bug in Berkeley Pascal compiler } procedure q; procedure EachUnodeUtoUsearch(procedure Search(T:node)); begin Search(1); end; procedure EachUnode(procedure P(T:node)); begin P(1); P(2); end; procedure R(V:node; procedure P(W:node)); begin { Defines graph with edges 1->2 and 2->1 } { Thus, the graph contains one SCC: [1,2] } case V of 1: P(2); 2: P(1); end; end; procedure Propagate(V,W:node); begin end; procedure TakeUSCC(Root:node; procedure Each(procedure P(T:node))); procedure P(T:node); begin write(T); end; begin writeln('TakeUSCC receives V=',Root,' from YieldUSCC'); writeln('The SCC''s constituents are:'); Each(P); writeln; end; begin EachUSCC(EachUnode,EachUnodeUtoUsearch,R,Propagate,TakeUSCC,2); end; procedure Doit; begin q; end; begin Doit; end; begin Debug := true; Outer; end. ------------------------------------------------------------------------------------ Thanks for fast reply ! Maurice -- Maurice Lombardi Laboratoire de Spectrometrie Physique, Universite Joseph Fourier de Grenoble, BP87 38402 Saint Martin d'Heres Cedex FRANCE Tel: 33 (0)4 76 51 47 51 Fax: 33 (0)4 76 51 45 44 mailto:Maurice DOT Lombardi AT ujf-grenoble DOT fr