[Beowulf] broken binutils (was: Redmond is at it, again)
Martin Siegert
siegert at sfu.ca
Fri Jun 18 13:40:13 PDT 2004
On Thu, Jun 17, 2004 at 10:34:28PM -0700, Greg Lindahl wrote:
> ... until the day that it actually is a kernel or glibc bug. "Oh, we
> don't really support that OS, you have to upgrade to something
> different." "I'm sorry, but that distro has a broken binutils, so
> programs with large common blocks simply can't be compiled, and we
> aren't going to even think about doing a workaround because not enough
> of our users use that distro." And it goes downhill from there.
>
> -- greg
Since you mentioned this: I am struggling with binutils right now.
Basically I am considering the following program:
double a[117403096];
int main(){}
gdb tells me that &a[117403095] is at 0x3ffffff8 and ldd tells me
that ld-linux.so.2 is at 0x40000000 (as always).
Thus, when I compile
double a[117403097];
int main(){}
ldd and a.out segfault because &a[117403096] overwrites the address
of the run-time linker (on your system you may have to change 117403096
a little bit). Arrgh. This means that you can only use about 1GB of
memory in programs with statically allocated arrays (which is mostly
a problem with old fashioned F77 programs). The workaround is to compile
with the -static flag so that you actually can safely overwrite the
0x40000000 address.
Now on a SuSE-9.1 box (with binutils-2.15.90.0.1.1, gcc-3.3.3, 2.6.4 kernel)
This problem disappears: When I compile
double a[117403097];
int main(){}
and the run "ldd a.out" it says "not a dynamic executable" even when
compiling without the -static flag. My first guess was that I just
have to upgrade ld to the 2.15 version, but after upgrading binutils
on a SuSE-9.0 box (gcc-3.3.1, 2.4.26 kernel) to exactly the same 2.15.90.0.1.1
version this does not fix the problem, i.e., ldd and a.out still segfault.
Thus: what is broken here? Do I need to upgrade gcc and/or the kernel
as well?
Cheers,
Martin
More information about the Beowulf
mailing list