DMD builds fail on Mac OS X

RESOLVED FIXED in mozilla29

Status

()

Core
DMD
RESOLVED FIXED
5 years ago
5 years ago

People

(Reporter: Ehsan, Assigned: smichaud)

Tracking

({regression})

Trunk
mozilla29
x86
Mac OS X
regression
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment)

(Reporter)

Description

5 years ago
4:08.25 Executing: /usr/local/bin/clang++ -Qunused-arguments -Qunused-arguments -Wall -Wpointer-arith -Woverloaded-virtual -Werror=return-type -Wtype-limits -Wempty-body -Wsign-compare -Wno-invalid-offsetof -Wno-c++0x-extensions -Wno-extended-offsetof -Wno-unknown-warning-option -Wno-return-type-c-linkage -Wno-mismatched-tags -Wno-error=uninitialized -Wno-error=deprecated-declarations -fcolor-diagnostics -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-exceptions -fno-math-errno -std=gnu++0x -pthread -DNO_X11 -pipe -DDEBUG -D_DEBUG -DTRACING -g -fno-omit-frame-pointer -fPIC -o libdmd.dylib -Wl,-filelist,/Users/ehsan/moz/src/obj-ff-dbg-dmd.noindex/memory/replace/dmd/tmp9c_CG9.list -framework Cocoa -lobjc -framework ExceptionHandling -Wl,-executable_path,/Users/ehsan/moz/src/obj-ff-dbg-dmd.noindex/dist/bin -dynamiclib -install_name @executable_path/libdmd.dylib -compatibility_version 1 -current_version 1 -single_module
 4:08.25 /Users/ehsan/moz/src/obj-ff-dbg-dmd.noindex/memory/replace/dmd/tmp9c_CG9.list:
 4:08.25     strcpy.o
 4:08.25     HashFunctions.o
 4:08.25     nsStackWalk.o
 4:08.25     DMD.o
 4:08.25
 4:08.25 Undefined symbols for architecture x86_64:
 4:08.25   "nsCocoaFeatures::OnLionOrLater()", referenced from:
 4:08.25       OnLionOrLater() in nsStackWalk.o
 4:08.25 ld: symbol(s) not found for architecture x86_64
 4:08.25 clang++: error: linker command failed with exit code 1 (use -v to see invocation)
 4:08.25 make[5]: *** [libdmd.dylib] Error 1
 4:08.25 make[4]: *** [memory/replace/dmd/libs] Error 2
 4:08.25 make[3]: *** [libs] Error 2
 4:08.25 make[2]: *** [default] Error 2
 4:08.25 make[1]: *** [realbuild] Error 2
 4:08.25 make: *** [build] Error 2
(Reporter)

Updated

5 years ago
Blocks: 676907
Keywords: regression
(Reporter)

Comment 1

5 years ago
I tried adding nsCocoaFeatures.mm to the build but that opens a can of worms since that will require us to pull in a whole bunch of XPCOM code...  One alternative is to copy the code inside nsCocoaFeatures.mm in nsStackWalk.cpp without the XPCOM-isms such as NS_OBJC_BEGIN_TRY_ABORT_BLOCK, etc.
(Reporter)

Updated

5 years ago
Blocks: 884368
FWIW, I'm still on 10.7 and I don't have any problem building.
(Reporter)

Comment 3

5 years ago
(In reply to comment #2)
> FWIW, I'm still on 10.7 and I don't have any problem building.

I'm on 10.9 in case it makes a difference.
(Reporter)

Comment 4

5 years ago
Actually, I don't understand why this has to be a 10.9 specific issue.  Does your nsStackWalk.cpp depend on nsCocoaFeatures.mm?  If yes, you should experience the same problem!
Flags: needinfo?(n.nethercote)
Summary: DMD builds fail on Mac → DMD builds fail on Mac OS X 10.9
(Reporter)

Comment 5

5 years ago
Also, are you on a debug build?  The code in question doesn't exist in opt builds.
Oh, I only tested an opt build.
Flags: needinfo?(n.nethercote)
(Assignee)

Updated

5 years ago
Blocks: 894090
(Assignee)

Comment 7

5 years ago
What are DMD builds? :-)

What mozconfig option do you need to make them happen?
DMD wraps malloc and free calls with various logging stuff, roughly speaking.

There's info on how to build it here:
  https://wiki.mozilla.org/Performance/MemShrink/DMD#Build
(Reporter)

Comment 9

5 years ago
This is the mozconfig you need to repro this bug:

ac_add_options --enable-dmd
ac_add_options --enable-debug

And it's not 10.9 specific, sorry for the red herring.
Summary: DMD builds fail on Mac OS X 10.9 → DMD builds fail on Mac OS X
(Assignee)

Updated

5 years ago
No longer blocks: 894090
Created attachment 8357412 [details] [diff] [review]
Simple fix

The problem here is that nsStackWalk.cpp, which contains a call to nsCocoaFeatures::OnLionOrLater(), is linked into both XUL and libdmd.dylib.  But while XUL also links the object code corresponding to nsCocoaFeatures.mm, libdmd.dylib doesn't.

So we can't call nsCocoaFeatures::OnLionOrLater() from nsStackWalk.cpp.

We also can't just paste in the version checking code from nsCocoaFeatures.mm (intAtStringIndex() and GetSystemVersion()), because that uses Objective-C syntax.  So unless we want to rewrite those methods to use CoreFoundation calls instead of Cocoa ones, we'll have to go back to using Gestalt() to get the OS X system version.

We've left lots of other calls to Gestalt() in the tree.  And (for complicated reasons) I'm reasonably certain Apple will never get rid of Gestalt(), though they've deprecated it.  So I think it's fine to also go back to using Gestalt() here.

It would be neater (and in the long run probably better) to rewrite the version checking code from nsCocoaFeatures.mm to not use Objective-C syntax.  That way we could (probably) replace all the calls to Gestalt() in the tree.  But we'll *never* be able to replace all the calls to Gestalt() with calls to nsCocoaFeatures::OnLionOrLater() and friends.
Assignee: nobody → smichaud
Attachment #8357412 - Flags: review?(bgirard)

Updated

5 years ago
Attachment #8357412 - Flags: review?(bgirard) → review+
https://hg.mozilla.org/mozilla-central/rev/8e8e69473e91
Status: NEW → RESOLVED
Last Resolved: 5 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla29
You need to log in before you can comment on or make changes to this bug.