Subject: Re: X11 on Ultra 2 using 32 bit kernel and user land.
To: Jochen Kunz <jkunz@unixag-kl.fh-kl.de>
From: Eduardo Horvath <eeh@NetBSD.org>
List: port-sparc64
Date: 04/23/2007 15:33:32
On Sun, 22 Apr 2007, Jochen Kunz wrote:
> On Fri, 20 Apr 2007 20:52:45 +0000 (UTC)
> Eduardo Horvath <eeh@NetBSD.org> wrote:
>
> > If you specify -mcpu=v9 to gcc it will both enable V9 instructions
> > and switch to a 64-bit memory model, which is probably not what you
> > want. That will generate ELF64 object files which cannot be linked
> > with ELF32 binaries, use the full LP64 programming model, as well as
> > a 64-bit stack which will cause alignment errors if you ever managed
> > to try to execute that code.
> Hmmm. When I run file(1) on a binary generatd by my V9 build, I get the
> same as for a binary generated by a native pkgsrc build:
> [jkunz@Kriggle jkunz]$ file /bin/sh /usr/pkg/bin/fvwm2
> /bin/sh: ELF 32-bit MSB executable, SPARC32PLUS, V8+
> Required, version 1 (SYSV), for NetBSD 4.99.17, dynamically linked (uses
> shared libs), not stripped
> /usr/pkg/bin/fvwm2: ELF 32-bit MSB executable, SPARC32PLUS, V8+
> Required, version 1 (SYSV), for NetBSD 4.99.17, dynamically linked (uses
> shared libs), stripped
> [jkunz@Kriggle jkunz]$ gcc --version
> gcc (GCC) 4.1.2 20070110 prerelease (NetBSD nb1 20070110)
>
> > -m32 -Wa,-Av8plusa -mcpu=ultrasparc
> I did a build with this settings and it succeeded. But I haven't run the
> result on actual hardware. file(1) reports the same executable type for
> binaries of this build as for my V9 build.
>
> Maybe gcc falls back to V8+ if V9 is specified without -m64?
It's not gcc that generates the object file. gcc only generates the
assembly code. It's gas that generates the object file. gas probably
defaults to 32-bit ELF. However, you should be careful here. The ELF
size specifies the format for segment specifications and relocations but
has nothing to do with the instructions in the image. It could be that
gcc generates 64-bit ABI compliant assembly code that gas assembles into a
32-bit ELF object file. This would allow the object to be linked with
other 32-bit object files but will crash if routines in it are ever
invoked.
Eduardo