AMD64 x86 Linux; f77 trouble with loader ?
Jan Hubicka
hubicka@ucw.cz
Sun Jan 11 14:28:00 GMT 2004
>
> Dear, GCC bugs,
>
> This bug is about f77 for the AMD64 x64 on Linux
> (for example Mandrake Linux for AMD64).
>
> The bug sample source code is compiled with f77
> with -c option to give a.o file fine.
> However, the loader (linker) gives error message
> and the a.out file is not made.
> (It seems the linker thinks the .bss area is no more
> than 4GB?)
>
> message from the linker is like:
> >: relocation truncated to fit: R_X86_64_32S .bss
> >collect2: ld returned 1 exit status
>
> This kind of bug makes the fortran very inconvenient
> and kills the 64bit address's advantage.
>
> Since, the fortran77 does not have the dynamic array
> allocation mechanizm, the total array size limitation
> of just about 4GB makes the fortran user quite sad.
>
> Hiroshi Murakami
> <dm@tmca.ac.jp>
>
> Script started on Sun 11 Jan 2004 11:01:07 PM EST
> $
> $
> $ f77 -v
> Reading specs from /usr/lib64/gcc-lib/amd64-mandrake-linux-gnu/3.3.1/specs
> Configured with: ../configure --prefix=/usr --libdir=/usr/lib64
> --with-slibdir=/lib64 --mandir=/usr/share/man --infodir=/usr/share/info
> --enable-shared --enable-threads=posix --disable-checking
> --enable-long-long --enable-__cxa_atexit
> --enable-languages=c,c++,ada,f77,objc,java,pascal
> --host=amd64-mandrake-linux-gnu --with-system-zlib
> Thread model: posix
> gcc version 3.3.1 (Mandrake Linux 9.2 3.3.1-4mdk)
> $
> $
> $ f77 -c a.f
First you need to use either hammer-branch GCC or mainline snapshot as
GCC 3.3.x does not support large datastructures reliably yet.
Use -mcmodel=medium switch to avoid the link time problems. The default
code model (small) limits code size to 2GB.
Honza
> $
> $
> $ f77 a.o
> a.o(.text+0x154): In function `MAIN__':
> : relocation truncated to fit: R_X86_64_32S .bss
> a.o(.text+0x183): In function `MAIN__':
> : relocation truncated to fit: R_X86_64_32S .bss
> collect2: ld returned 1 exit status
> $
> $
> $ cat a.f
> *========================================
> *
> * This is compiled fine with $ f77 -c a.f to give a.o file.
> * However, the loader (linker) gives error message and
> * the a.out file is not made.
> * (It seems the linker thinks the bss area is no more
> * than 4GB?)
> *
> program main
> implicit none
> integer mb,n
> parameter(mb=1024*1024/8,n=1000)
> integer i,j
> * These arrays are 1000MB each in size.
> real*8 x1(mb,n)
> real*8 x2(mb,n)
> real*8 x3(mb,n)
> real*8 x4(mb,n)
> real*8 x5(mb,n)
> do j=1,n
> print *, '< ',j
> do i=1,mb
> x1(i,j)=i+j
> x2(i,j)=i-j
> x3(i,j)=i*j
> x4(i,j)=i/j
> x5(i,j)=i-2*j
> enddo
> enddo
> end
> *========================================
> $ exit
> exit
>
> Script done on Sun 11 Jan 2004 11:01:34 PM EST
More information about the Gcc-bugs
mailing list