On Solaris 9 with an up-to-date patch 112936-16 (also confirmed with 112936-12), running: g++ hello.c # Using gnu ld from binutils-2.15 /usr/ccs/bin/strip a.out ./a.out produces a bus error. hello.c is: #include <stdio.h> int main() { printf("Hello, world.\n"); } The version of gcc does not appear very important; I confirmed the bug with 3.3.2 and 3.4.2. The bug still manifests if I use gnu ld from the binutils trunk. The bug does NOT manifest if I use the vendor ld, or gnu ld from binutils 2.14 or binutils 2.11.2. It also does not manifest if I use strip from binutils instead of /usr/ccs/bin/strip, or if I link with gcc instead of with g++.
A binary search on the CVS repository pins the introduction of this problem on the changes made on July 25, 2003, specifically the commit from H.J. Lu to add special sections. Rev 1.192 of bfd/elf.c is one of the revisions associated with the commit.
Unless you can show that GNU ld is doing something wrong here, I would guess that most people reading this will decide that /usr/ccs/bin/strip is buggy, and ignore your bug report.
Regardless of whether the bogus behavior is in Solaris strip or gnu ld, it's the responsibility of gnu binutils to work with (at least the latest version of) the vendor tools. If gnu ld produced executables which did not run on Solaris due to a bug in Solaris's dynamic loader or C libraries, it would still be important to fix it. Obviously, a bad interaction with "strip" is not as severe as that would be, but it's in the same category of problem.
Either this is already fixed, or won't ever be fixed since it appears no one using solaris could be bothered to contibute a fix in 15 year.