QNX Technical Articles
QNX® Software Development Platform 6.5.0 DT_FINI_ARRAY Patch (Patch ID 2117) Release Notes
Date of this edition: November 03, 2010
Target OS: This patch is compatible with targets that are running QNX® Neutrino® 6.5.0.
Host OS: In order to apply this patch, you must have installed the QNX Software Development Platform 6.5.0 as a self-hosted QNX Neutrino® development system, or on one of the following development hosts:
- Microsoft Windows 7 Professional 32- and 64-bit, Vista Business 32- and 64-bit, XP Professional SP3, or 2000 SP4
- Linux Red Hat Enterprise Linux 5.4 Desktop 32- and 64-bit, Red Hat Fedora 12, Ubuntu Workstation 9.10 32- and 64-bit, or openSUSE 11.2
![]() |
For the most up-to-date version of these notes, go to our website (www.qnx.com), log into your myQNX account, and then go to the Download area. |
Contents
Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.
What's in this patch?
The main archive for this patch (patch-650-2117-dt-fini-array.tar) updates the following files:
- target/qnx6/ppcbe-spe/lib/libc.so.3
- target/qnx6/ppcbe/lib/libc.so.3
- target/qnx6/x86/lib/libc.so.3
- target/qnx6/armle-v7/lib/libc.so.3
- target/qnx6/armle/lib/libc.so.3
- target/qnx6/shle/lib/libc.so.3
- target/qnx6/mipsle/lib/libc.so.3
- target/qnx6/mipsbe/lib/libc.so.3
The optional companion archive (patch-650-2117-dt-fini-array-sym.tar) contains updated versions of the following symbol files:
- target/qnx6/ppcbe-spe/lib/libc.so.3.sym
- target/qnx6/ppcbe/lib/libc.so.3.sym
- target/qnx6/x86/lib/libc.so.3.sym
- target/qnx6/armle-v7/lib/libc.so.3.sym
- target/qnx6/armle/lib/libc.so.3.sym
- target/qnx6/shle/lib/libc.so.3.sym
- target/qnx6/mipsle/lib/libc.so.3.sym
- target/qnx6/mipsbe/lib/libc.so.3.sym
Fixed issues
This patch corrects the following error in the handling of DT_FINI_ARRAY:
- If you manually define DT_FINI_ARRAY, the first destructor in the DT_FINI_ARRAY list isn't called. The effect of this omission depends on what that destructor is intended to do. On all platforms except ARMLE-v7, this is the only case in which your software would be affected.
- On ARMLE-v7, the following also occur:
- DT_FINI_ARRAY is generated for any initialized C++ object. Depending on the exact ordering, one destructor isn't called (most probably that of the first object to get initialized).
- If your application calls dlopen() for a C++ shared object with global C++ objects and then closes it by calling dlclose(), the process will crash when it exits. After the dlclose(), the destructor isn't called but remains registered in the __aeabi_atexit array. When the application exits, an attempt is made to call (the now gone) function, resulting most probably in a SIGSEGV or other odd behavior (e.g. if the virtual address got occupied by something else after the above mentioned dlclose()).
- If you use __attribute__((destructor)), the first destructor in the array isn't called.
(Ref# 77236)
Known issues
None currently known.
Technical support
If you have any questions, comments, or problems with a QNX product, please contact Technical Support. For more information, see the How to Get Help chapter of the Welcome to the QNX Software Development Platform guide or visit our website, www.qnx.com.