Solaris 7 64-bit Developer's Guide

What's New for Applications

Most of the new features of the 64-bit environment are simply extensions of generic 32-bit interfaces, though there are several new features that are unique to SPARC V9.

The SPARC Compliance Definition, Version 2.4 contains details of the SPARC V9 ABI. It describes the 32-bit, SPARC V8 ABI and the 64-bit, SPARC V9 ABI. You can obtain this document from SPARC International at www.sparc.com.

Generic 64-bit ABI Features

64-bit applications are described using Executable and Linking Format (ELF64), which allows large applications and large address spaces to be described completely.

SPARC V9 ABI Features

Below is a list of the SPARC V9 ABI Features.

Address Space Layout

For 64-bit applications, the layout of the address space is closely related to that of 32-bit applications, though the starting address and addressing limits are radically different. Like SPARC V8, the stack grows down from the top of the address space, while the heap extends the data segment from the bottom.

The diagram below shows the default address space provided to a 64-bit application. The regions of the address space marked as reserved might not be mapped by applications. These restrictions might be relaxed on future systems.

Graphic

The actual addresses above describe a particular implementation on a particular machine, and are given for illustrative purposes only.

Placement of Text and Data

By default, 64-bit programs are linked with a starting address of 0x100000000. The whole program will be above 4 gigabytes, including its text, data, heap, stack, and shared libraries. This helps insure that 64-bit programs are correct by making it so the program will fault in the least significant 4 gigabytes of its address space if it truncates any of its pointers.

While 64-bit programs are linked above 4 gigabytes, it is still possible to link them below 4 gigabytes by using a linker mapfile and the -M option to the compiler or linker. A linker mapfile for linking a 64-bit SPARC program below 4 gigabytes is provided in /usr/lib/ld/sparcv9/map.below4G. See the ld(1) linker man page for more information.