Closed Bug 611451 Opened 14 years ago Closed 12 years ago

Mac OS X shared libraries export all symbols

Categories

(NSS :: Build, defect, P2)

x86
macOS
defect

Tracking

(Not tracked)

RESOLVED FIXED
3.14.1

People

(Reporter: briansmith, Assigned: wtc)

Details

Attachments

(1 file)

The Sync J-PAKE prototype uses JS-ctypes to access the MPI library embedded in the FreeBL shared library. The prototype was developed on Mac OS X and apparently worked fine on that platform. When the Sync J-PAKE prototype was tested on Windows, it failed. The hypothesis is that the Mac OS X builds are exporting the MPI symbols from the FreeBL shared library whereas the other platforms are not. Presumably, the Mac OS X behavior is wrong and the shared libraries need to be built with MPI and other internal symbols hidden.
I noticed this bug today. Looking at the build log closely, I saw a warning message from the nmedit command: grep -v ';+' nssutil.def | grep -v ';-' | sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' -e 's,^,_,' > Darwin12.2.0_64_DBG.OBJ/nssutil.def rm -f Darwin12.2.0_64_DBG.OBJ/libnssutil3.dylib gcc -arch x86_64 -dynamiclib -compatibility_version 1 -current_version 1 -install_name @executable_path/libnssutil3.dylib -headerpad_max_install_names -o Darwin12.2.0_64_DBG.OBJ/libnssutil3.dylib Darwin12.2.0_64_DBG.OBJ/quickder.o Darwin12.2.0_64_DBG.OBJ/secdig.o Darwin12.2.0_64_DBG.OBJ/derdec.o Darwin12.2.0_64_DBG.OBJ/derenc.o Darwin12.2.0_64_DBG.OBJ/dersubr.o Darwin12.2.0_64_DBG.OBJ/dertime.o Darwin12.2.0_64_DBG.OBJ/errstrs.o Darwin12.2.0_64_DBG.OBJ/nssb64d.o Darwin12.2.0_64_DBG.OBJ/nssb64e.o Darwin12.2.0_64_DBG.OBJ/nssrwlk.o Darwin12.2.0_64_DBG.OBJ/nssilock.o Darwin12.2.0_64_DBG.OBJ/oidstring.o Darwin12.2.0_64_DBG.OBJ/portreg.o Darwin12.2.0_64_DBG.OBJ/secalgid.o Darwin12.2.0_64_DBG.OBJ/secasn1d.o Darwin12.2.0_64_DBG.OBJ/secasn1e.o Darwin12.2.0_64_DBG.OBJ/secasn1u.o Darwin12.2.0_64_DBG.OBJ/secitem.o Darwin12.2.0_64_DBG.OBJ/secload.o Darwin12.2.0_64_DBG.OBJ/secoid.o Darwin12.2.0_64_DBG.OBJ/sectime.o Darwin12.2.0_64_DBG.OBJ/secport.o Darwin12.2.0_64_DBG.OBJ/templates.o Darwin12.2.0_64_DBG.OBJ/utf8.o Darwin12.2.0_64_DBG.OBJ/utilmod.o Darwin12.2.0_64_DBG.OBJ/utilpars.o -L../../../../dist/Darwin12.2.0_64_DBG.OBJ/lib -L../../../../dist/Darwin12.2.0_64_DBG.OBJ/lib -lplc4 -lplds4 -lnspr4 chmod +x Darwin12.2.0_64_DBG.OBJ/libnssutil3.dylib nmedit -s Darwin12.2.0_64_DBG.OBJ/nssutil.def Darwin12.2.0_64_DBG.OBJ/libnssutil3.dylib nmedit: removing global symbols from a final linked no longer supported. Use -exported_symbols_list at link time when building: /Users/wtc/nss-tip.2/mozilla/security/nss/lib/util/Darwin12.2.0_64_DBG.OBJ/libnssutil3.dylib I will attach a patch.
Assignee: nobody → wtc
Status: NEW → ASSIGNED
Priority: -- → P2
Target Milestone: --- → 3.14.2
This patch implements the suggestion in the nmedit warning message. I verified it works on Mac OS X 10.8.2 with Xcode 4.5.1. I am worried that the -exported_symbols_list linker option won't work on the NSS Mac/ppc tinderbox. Kai, could you test it?
Attachment #689571 - Flags: superreview?(kaie)
Attachment #689571 - Flags: review?(bsmith)
Comment on attachment 689571 [details] [diff] [review] Use the -exported_symbols_list linker option instead of the nmedit command This is very similar to what we do in Gecko. r+ me though I'm not the best reviewer for Mac-specific stuff.
Attachment #689571 - Flags: review?(bsmith) → review+
Comment on attachment 689571 [details] [diff] [review] Use the -exported_symbols_list linker option instead of the nmedit command (In reply to Wan-Teh Chang from comment #2) > > I am worried that the -exported_symbols_list linker option won't > work on the NSS Mac/ppc tinderbox. Kai, could you test it? Kai, I found the answer to my question in bug 403250 comment 1. The -exported_symbols_list linker option is supported by the ld in all the Xcode versions we use today. So please don't test this patch on the NSS Mac/ppc tinderbox. For future reference: Mozilla's use of nmedit and transition to -exported_symbols_list was done in three bugs: Bug 187732 - limit exported symbols for components Bug 195186 - Use -exported_symbols_list instead of nmedit when possible Bug 403250 - [10.5] 1.8 build configured with --enable-strip fails: strip: symbols referenced by relocation entries that can't be stripped in: .../xpinstall/src/libxpinstall.dylib
Comment on attachment 689571 [details] [diff] [review] Use the -exported_symbols_list linker option instead of the nmedit command Mark, could you review this patch? This is the NSS equivalent of your patch in bug 403250. Thanks.
Attachment #689571 - Flags: superreview?(kaie) → superreview?(mark)
Comment on attachment 689571 [details] [diff] [review] Use the -exported_symbols_list linker option instead of the nmedit command r+ rrelyea as well
Attachment #689571 - Flags: review+
Patch checked in on the NSS trunk (NSS 3.14.1). Checking in Darwin.mk; /cvsroot/mozilla/security/coreconf/Darwin.mk,v <-- Darwin.mk new revision: 1.32; previous revision: 1.31 done Checking in rules.mk; /cvsroot/mozilla/security/coreconf/rules.mk,v <-- rules.mk new revision: 1.88; previous revision: 1.87 done
Severity: minor → normal
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Target Milestone: 3.14.2 → 3.14.1
Patch pushed to mozilla-inbound as part of NSS_3_14_1_BETA3: https://hg.mozilla.org/integration/mozilla-inbound/rev/0956fb40dbe2
Attachment #689571 - Flags: superreview?(mark) → superreview+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: