Go to main content

What's New in Oracle® Solaris 11.4

Exit Print View

Updated: August 2018

Enhancements for Developers

This section describes enhancements for developers that are new in this release that make developing applications on the Oracle Solaris platform easier with state-of-the-art libraries and reliable frameworks.

C11 Programming Language Standard Support

Oracle Solaris 11.4 contains support for the C11 programming language standard: "ISO/IEC 9899:2011 Information technology - Programming languages - C". The C11 standard is a compatible revision of the C99 standard. Historically, the C programming language standard has been part of the Single UNIX Specification. However, the new C programming language standard, C11, is available separate from and ahead of the next UNIX specification.

Oracle Solaris 11.4 provides support for C11 alongside C99 to provide customers with C11 support ahead of its inclusion in a future UNIX specification. The new standard can be used with the Oracle Developer Studio 12.5 or 12.6, GCC 5 or 7, and LLVM/Clang 6.0 C compilers. Developers can also write C programs using the newest available C programming language standard.

Standard Compilation Environment

In Oracle Solaris 11.4, the default compilation mode (when no feature test macros are used to request conformance to a particular POSIX standard), makes the following visible:

  • The name space that corresponds to the latest POSIX specification

  • All other functions and names normally provided by the Oracle Solaris OS

For Oracle Solaris 11.4, the latest POSIX specification is IEEE Std. 1003.1-2008 Base Specifications, Issue 7 (aka XPG7, UNIX V7, SUSv4).

Binary compatibility is maintained. However, source compatibility might be affected in the following ways:

POSIX Threads

The feature test macro _POSIX_PTHREAD_SEMANTICS is obsolete and no longer needed. It will not be tested by any header file. Versions of interfaces that previously were made visible only by using -D_POSIX_PTHREAD_SEMANTICS or appropriate standards feature test macros are now visible by default. These include asctime_r(), ctime_r(), getgrgid_r(), getgrnam_r(), getlogin_r(), getpwnam_r(), getpwuid_r(), readdir_r(), sigwait(), and ttyname_r(). The previous default interfaces, which were based on a draft POSIX Threads standard, are still available at compilation time by using -D__USE_DRAFT6_PROTOTYPES__. See the intro(3) man page for more information.

X/Open Sockets (XNS Issue 4)

Previously, -D_XOPEN_SOURCE=500 was required in order to use the sockets interfaces defined by the X/Open standard. These interfaces are now visible in the default compilation environment as well. Compilation of applications that rely on the old SunOS4.x style sockets now requires the use of -D__USE_SUNOS_SOCKETS__. See socket.h(3HEAD) for more information.

Process Control Library

Oracle Solaris 11.4 includes a new process control library, libproc, which provides a higher-level interface to features of the /proc interface. The library also provides access to information such as symbol tables, which are necessary for the examination and control of processes and threads.

    A controlling process using libproc can typically:

  • Grab a victim process, suspending its execution

  • Examine the state of the victim process

  • Examine and modify the address space of the victim process

  • Make the victim process execute system calls on behalf of the controlling process

  • Release the victim process to run again unmolested

The libproc library provides all the mechanisms needed by a breakpoint debugger to do its job. It also facilitates the creation of simple one-shot controlling applications to do simple things to victim processes without the processes being aware of the intrusion.

For more information, see the libproc(3LIB) man page.

Improved Locale Support

Oracle Solaris 11.4 includes improvements to the existing locale support APIs provided by libc and the addition of new APIs defined in the UNIX V7 standard. uselocale and other APIs defined in the UNIX V7 standard have been introduced to support locales between threads and changing the locale of the thread. In combination with the new APIs, the existing locale support APIs have been updated to be fully MT-safe. The underlying locale handling in libc has been improved for better performance, and smaller resource usage of applications that use multiple locales.

For more information, see the uselocale(3C), newlocale(3C), freelocale(3C), wctype(3C), and localedef(1) man pages.

User-Mode Watchpoints

Oracle Solaris 11.4 now implements user-mode watchpoints with Silicon Secured Memory (SSM) instead of virtual memory maps. A watchpoint is an event that is triggered when a memory location is written to or read from, and can be used for debugging and performance analysis. Watchpoints are currently implemented by making the page containing the address inaccessible. This action greatly slows execution if the thread frequently touches unrelated locations on the same page. By contrast, SSM has a much finer granularity with the 64-byte cache-line. In addition, SSM is multi-threaded, whereas all threads share the same virtual memory pages.

For more information, see the dbx(1) and mdb(1) man pages.

DTrace Library

Oracle Solaris 11.4 includes a new process control library, libdtrace, that enables developers to write bespoke DTrace applications.

For more information, see Appendix A, libdtrace API Reference, in Oracle Solaris 11.4 DTrace (Dynamic Tracing) Guide.

DWARF Support in DTrace

In Oracle Solaris 11.4, DTrace can use DWARF to perform address to source code metadata translation for user processes. The new uresolve option enables the ustack(), uaddr(), and printf() actions of DTrace to translate user addresses to source code file names and line numbers, given the presence of DWARF debugging information. This feature provides a more intuitive interpretation of common diagnostic output while retaining compatibility with common compiler standards.

For more information, see the ustack(), uaddr(), and printf() actions in DTrace Data Recording Actions in Oracle Solaris 11.4 DTrace (Dynamic Tracing) Guide.

pstack Support for DWARF-encoded Line Numbers

In Oracle Solaris 11.4, the pstack command will annotate frames with source code metadata, given the presence of DWARF debugging information. This feature provides a more intuitive interpretation of common diagnostic output while retaining compatibility with common compiler standards.

For more information, see pstack in the proc(1) man page.

DWARF Unwinding in pstack and mdb

In Oracle Solaris 11.4, both pstack and mdb support DWARF and DWARF-style stack unwinding for user processes. In addition, pstack and mdb also allow the recovery of function arguments from processes compiled with the new -preserve_argvalues=complete option of Oracle Developer Studio. This capability provides particular improvements to the observability and diagnosability of amd64 processes, though the functionality applies to both 32- and 64-bit processes on both x64 and SPARC.

The mdb ::stackregs dcmd is now enabled for amd64, where frames’ registers are recovered using DWARF-style unwind tables.

Cython Compiler

Cython is an optimizing static compiler for both the Python programming language and the extended Cython programming language which is based on Pyrex. This feature enables generation of high performance code using Python.

For more information, see Cython C-Extensions for Python.

Oracle Database Programming Interface-C

Oracle Database Programming Interface-C (ODPI-C) is a wrapper around the Oracle Call Interface (OCI), working transparently with different versions of the Oracle Instant Client libraries.

ODPI-C eliminates the requirement for applications to set LD_LIBRARY_PATH prior to execution. Additionally, ODPI-C works transparently with multiple versions of the Oracle Instant Client libraries. Software that requires use of the Oracle Instant Client libraries will not require setting ORACLE_HOME prior to execution.

To use ODPI-C, install the developer/oracle/odpi package.

For more information about ODPI-C, see the Oracle Database Programming Interface for Drivers and Applications project on GitHub and the libodpic (3LIB) man page. Oracle Instant Client is available in IPS format. See “Instant Client for Solaris” at Oracle Instant Client Downloads.

cx_Oracle Python Module

cx_Oracle is a Python module that enables you to access Oracle Database 12c and 11i from Python applications. While the module is commonly available through prebuilt packages for other operating systems, it has not until now been similarly available for Oracle Solaris. The module is available in both 32-bit and 64-bit forms. The Oracle Solaris packaged version 5.2 can be used with Python 2.7 and 3.4.

For more information, see cx_Oracle's documentation.