Date: Thu, 27 Jan 2005 13:27:04 -0600 From: "James R. Van Artsdalen" <james@jrv.org> To: Steve Kargl <sgk@troutmask.apl.washington.edu> Cc: freebsd-amd64@freebsd.org Subject: Re: What is R_X86_64_PC32? Message-ID: <41F94088.4050800@jrv.org> In-Reply-To: <20050127175934.GA44783@troutmask.apl.washington.edu> References: <20050127175934.GA44783@troutmask.apl.washington.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Steve Kargl wrote: >This simple fortran program: > > program kk > implicit none > integer N > parameter (N=32768) > real input(N,N) > input(1,1) = 1.e0 > end program kk > > >when compiled by either the system's f77 command or gfortran, >generates the following error: > >troutmask:kargl[217] f77 -o df df.f >/usr/lib/crt1.o(.text+0x15): In function `_start': >: relocation truncated to fit: R_X86_64_PC32 environ >Is this an indication that the stack isn't large enough? > > > I don't think this is anything you're doing. The error is actually a relocation being applied to the startup code in crt1.c: /* The entry function. */ void _start(char **ap, void (*cleanup)(void)) { int argc; char **argv; char **env; const char *s; argc = *(long *)(void *)ap; argv = ap + 1; env = ap + 2 + argc; I think the linker is getting the error trying to fixup the write to env here: 0000000000000000 <_start>: 0: 41 54 push %r12 2: 55 push %rbp 3: 53 push %rbx 4: 8b 2f mov (%rdi),%ebp 6: 4c 8d 67 08 lea 0x8(%rdi),%r12 a: 48 63 dd movslq %ebp,%rbx d: 48 8d 5c df 10 lea 0x10(%rdi,%rbx,8),%rbx 12: 48 89 1d 00 00 00 00 mov %rbx,0(%rip) # 19 <_start+0x19> I *think* that last line is the write to env? In that case there's only room for a 32-bit offset between the address of this code and that of env. Peter, Dave: do we require that statically allocated data be within 2 GB of any code that might reference it by name? Even if that's true it's not obvious to me why your test program isn't meeting such a requirement?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41F94088.4050800>