Page MenuHomeFreeBSD

New spidermonkey port based on firefox-esr 52.4.1.
AbandonedPublic

Authored by kwm on Oct 14 2017, 1:40 PM.
Tags
Referenced Files
F80200826: D12669.diff
Fri, Mar 29, 5:08 AM
Unknown Object (File)
Feb 19 2024, 6:55 AM
Unknown Object (File)
Jan 23 2024, 3:14 AM
Unknown Object (File)
Dec 22 2023, 11:35 PM
Unknown Object (File)
Dec 14 2023, 12:15 AM
Unknown Object (File)
Nov 29 2023, 12:42 AM
Unknown Object (File)
Nov 24 2023, 9:26 AM
Unknown Object (File)
Oct 21 2023, 12:28 AM
Subscribers

Details

Reviewers
None
Group Reviewers
gecko
Summary

But I need help. When build with clang there are undefined references,
and I'm not able to find out why this is. I listed the things I did
find out in this review. But I suspect it is either my unfamiliarty with
C++, the mozilla buildsystem or some kind of wierd clang vs gcc thing.

I found this problem when I was trying to port lang/gjs to version 1.50.1.
This version requires spidermonkey52 but I was getting the undefined
references problem. This problem first showed up on my test system which
is running HEAD, but I also reproduced it on 10.3-i386 with clang.

./.libs/libgjs.so: undefined reference to `void JS::TraceEdge<JSObject*>(JSTracer*, JS::Heap<JSObject*>*, char const*)'
./.libs/libgjs.so: undefined reference to `void js::UnsafeTraceManuallyBarrieredEdge<JSObject*>(JSTracer*, JSObject**, char const*)'
./.libs/libgjs.so: undefined reference to `void js::UnsafeTraceManuallyBarrieredEdge<JS::Value>(JSTracer*, JS::Value*, char const*)'
./.libs/libgjs.so: undefined reference to `void js::UnsafeTraceManuallyBarrieredEdge<jsid>(JSTracer*, jsid*, char const*)'

After some looking around I decided to build spidermonkey52 with both clang
and gcc6, and looked at the symbols in libmozjs-52.so.

nm -DgC /usr/local/lib/libmozjs-52.so.1 > ${compiler}-symbols.txt

lang/spidermonkey52 % cat gcc-symbols.txt | grep JS::TraceEdge
0000000000650ecc T JS::TraceEdge(JSTracer*, JS::TenuredHeap<JSObject*>*, char const*)
000000000065e082 W void JS::TraceEdge<jsid>(JSTracer*, JS::Heap<jsid>*, char const*)
0000000000662961 W void JS::TraceEdge<JS::Value>(JSTracer*, JS::Heap<JS::Value>*, char const*)
000000000065c123 W void JS::TraceEdge<JSFunction*>(JSTracer*, JS::Heap<JSFunction*>*, char const*)
000000000065ccc2 W void JS::TraceEdge<JSAtom*>(JSTracer*, JS::Heap<JSAtom*>*, char const*)
000000000065c146 W void JS::TraceEdge<JSObject*>(JSTracer*, JS::Heap<JSObject*>*, char const*)
000000000065ea67 W void JS::TraceEdge<JSScript*>(JSTracer*, JS::Heap<JSScript*>*, char const*)
000000000065cce5 W void JS::TraceEdge<JSString*>(JSTracer*, JS::Heap<JSString*>*, char const*)
000000000065ddcf W void JS::TraceEdge<JS::Symbol*>(JSTracer*, JS::Heap<JS::Symbol*>*, char const*)
clang:
0000000000740770 T JS::TraceEdge(JSTracer*, JS::TenuredHeap<JSObject*>*, char const*)
00000000007519d0 W void JS::TraceEdge<jsid>(JSTracer*, JS::Heap<jsid>*, char const*)
0000000000751870 W void JS::TraceEdge<JS::Value>(JSTracer*, JS::Heap<JS::Value>*, char const*)
0000000000751530 W void JS::TraceEdge<JSFunction*>(JSTracer*, JS::Heap<JSFunction*>*, char const*)
00000000007513e0 W void JS::TraceEdge<JSAtom*>(JSTracer*, JS::Heap<JSAtom*>*, char const*)
0000000000751590 W void JS::TraceEdge<JSScript*>(JSTracer*, JS::Heap<JSScript*>*, char const*)
0000000000751720 W void JS::TraceEdge<JSString*>(JSTracer*, JS::Heap<JSString*>*, char const*)
0000000000751290 W void JS::TraceEdge<JS::Symbol*>(JSTracer*, JS::Heap<JS::Symbol*>*, char const*)

Ok so only the JS::TraceEdge<JSObject*>() function is missing. Now the
other symbol.

lang/spidermonkey52 % cat gcc-symbols.txt | grep js::UnsafeTraceManuallyBarrieredEdge
000000000065e0a8 W void js::UnsafeTraceManuallyBarrieredEdge<jsid>(JSTracer*, jsid*, char const*)
0000000000662991 W void js::UnsafeTraceManuallyBarrieredEdge<JS::Value>(JSTracer*, JS::Value*, char const*)
000000000065c138 W void js::UnsafeTraceManuallyBarrieredEdge<JSFunction*>(JSTracer*, JSFunction, char const*)
000000000065ccd7 W void js::UnsafeTraceManuallyBarrieredEdge<JSAtom*>(JSTracer*, JSAtom
, char const*)
000000000065c15b W void js::UnsafeTraceManuallyBarrieredEdge<JSObject*>(JSTracer*, JSObject, char const*)
000000000065ea7c W void js::UnsafeTraceManuallyBarrieredEdge<JSScript*>(JSTracer*, JSScript
, char const*)
000000000065ccfa W void js::UnsafeTraceManuallyBarrieredEdge<JSString*>(JSTracer*, JSString, char const*)
000000000065dde4 W void js::UnsafeTraceManuallyBarrieredEdge<JS::Symbol*>(JSTracer*, JS::Symbol
, char const*)

lang/spidermonkey52 % cat clang-symbols.txt | grep js::UnsafeTraceManuallyBarrieredEdge
0000000000751370 W void js::UnsafeTraceManuallyBarrieredEdge<JS::Symbol*>(JSTracer*, JS::Symbol**, char const*)

This function is even missing more stuff.

I think we can presume there are more "missing symbols" but these are the
only onces I focused on due to gjs.

Diff Detail

Repository
rP FreeBSD ports repository
Lint
No Lint Coverage
Unit
No Test Coverage
Build Status
Buildable 12045
Build 12352: arc lint + arc unit

Event Timeline

CC'ing gecko people, with the hope they can help with the symbol problems with standalone spidermonkey52.

Before anyone asks, the patches are from the archlinux mozjs52 package.

sigh, I never learn phabricator ... Properly add gecko@ as reviewer

Issues been fixed, spidermonkey 52 will arrive to the ports tree soon TM.