Closed
Bug 1246501
Opened 10 years ago
Closed 10 years ago
jsep_track_unittest missing LockImpl signals
Categories
(Core :: WebRTC: Signaling, defect)
Core
WebRTC: Signaling
Tracking
()
RESOLVED
FIXED
mozilla47
| Tracking | Status | |
|---|---|---|
| firefox47 | --- | fixed |
| backlog | parking-lot |
People
(Reporter: stevensn, Assigned: stevensn)
Details
Attachments
(1 file, 1 obsolete file)
|
6.24 KB,
patch
|
Details | Diff | Splinter Review |
The webrtc signalling unit tests don't compile on my ppc64 machine.
8:53.57 ../../trunk/webrtc/modules/modules_rtp_rtcp/Unified_cpp_webrtc_modules1.o: In function `Lock::Acquire()':
8:53.57 /media/nfs/usb_drive_src/firefox/mozilla-central-hg/src/ipc/chromium/src/base/lock.h:16: undefined reference to `LockImpl::Lock()'
8:53.57 ../../trunk/webrtc/modules/modules_rtp_rtcp/Unified_cpp_webrtc_modules1.o: In function `Lock::Release()':
8:53.57 /media/nfs/usb_drive_src/firefox/mozilla-central-hg/src/ipc/chromium/src/base/lock.h:17: undefined reference to `LockImpl::Unlock()'
8:53.58 /usr/bin/ld: jsep_track_unittest: hidden symbol `_ZN8LockImpl6UnlockEv' isn't defined
This issue was introduced in commit 8ee641313088 for bug 1219339
| Assignee | ||
Comment 1•10 years ago
|
||
Randell,
I don't have access to view the details of bug 1219339
Why aren't these unit tests pulling in required parts of ipc/chromium
Should I add LockImpl to FakeIPC.cpp or is there a better solution?
Flags: needinfo?(rjesup)
Comment 2•10 years ago
|
||
Sorry, no idea why they're not pulled in; I'd check the differences in the compile lines between ppc64 and x86 for this and for the file/dir that implements LockImpl in ipc.
Breaking the commandline at spaces, then using diff on the two may work better than straight diff
Flags: needinfo?(rjesup)
Updated•10 years ago
|
backlog: --- → parking-lot
| Assignee | ||
Comment 3•10 years ago
|
||
Randell,
Why isn't it the linking for the unit test picking up PlatformThread on x86 from ipc/chromium/src/base/platform_thread_posix.cc ?
Comment 4•10 years ago
|
||
Note that symbols from libxul are NOT generally exported and aren't accessible from C++ unit tests, except for a few white-listed ones. See symbols.def. That's why there's a lot of code with #ifdef MOZILLA_INTERNAL_API and stuff like that.
| Assignee | ||
Comment 5•10 years ago
|
||
Bug 1219339 added includes of Singleton.h to a few places in webrtc/signalling
Singleton.h (in ipc/chromium) includes atomic_ops.h
For all the tier 1 platforms there is a platform specific file that this includes (ie atomicops_internals_arm_gcc.h) but otherwise it falls back to
atomicops_internals_mutex.h which includes lock.h
This is why I get the undefined symbols from lock.h ppc64 but tier1 platforms link fine.
It is unclear to me where I would have to whitelist these symbols so the unit test can see them. I don't see a file named symbols.def
There is a version of the atomicops for ppc https://chromium.googlesource.com/v8/v8/+/4cbd63c9bfee2b734f67f5bd36b98dcab072021f/src/base/atomicops_internals_ppc_gcc.h
I will try adapting that.
| Assignee | ||
Comment 6•10 years ago
|
||
| Assignee | ||
Updated•10 years ago
|
Assignee: nobody → steve
Status: NEW → ASSIGNED
| Assignee | ||
Comment 7•10 years ago
|
||
Martin,
I expect you will hit the same linking issue on SPARC.
| Assignee | ||
Updated•10 years ago
|
Attachment #8719232 -
Flags: review?(benjamin)
Comment 8•10 years ago
|
||
Comment on attachment 8719232 [details] [diff] [review]
Add ppc specific atomic operations to ipc/chromium
Waldo is the atomics expert, I think.
Attachment #8719232 -
Flags: review?(benjamin) → review?(jwalden+bmo)
| Assignee | ||
Comment 9•10 years ago
|
||
Jeff, any update on this review? Is there someone else I should assign it to?
Comment 10•10 years ago
|
||
I haven't found a good, solid chunk of time to devote to it just yet, unfortunately. Maybe tomorrow.
Comment 11•10 years ago
|
||
Comment on attachment 8719232 [details] [diff] [review]
Add ppc specific atomic operations to ipc/chromium
Review of attachment 8719232 [details] [diff] [review]:
-----------------------------------------------------------------
There's semi-pervasive use of inlines, here, before their definitions. For example:
inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,
Atomic64 increment) {
return Barrier_AtomicIncrement(ptr, increment);
}
inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,
Atomic64 increment) {
...
}
Presumably this works at all because atomicops.h declares all these functions, then this header just (later, in each translation unit) defines them. Traditionally I believe GCC will warn about using an inline function that hasn't been defined yet, so this seems possibly like it'll be pretty spewy.
But hey -- this is PPC-only, so it's your problem if you get warnings out the wazoo from this. :-)
::: ipc/chromium/src/base/atomicops_internals_ppc_gcc.h
@@ +37,5 @@
> + }
> +}
> +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
> + Atomic32 old_value, Atomic32 new_value) {
> + return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
This reads super-squirrely. At the top of this file (inside the subtle namespace), please add
namespace detail {
inline Atomic32
FullyBarriered_CompareAndSwap(volatile Atomic32* ptr,
Atomic32 old_value, Atomic32 new_value) {
...current contents of NoBarrier_CompareAndSwap...
}
} // namespace detail
and then call detail::FullyBarriered_CompareAndSwap in *_CompareAndSwap. It's of course perfectly fine to have more barriers than strictly required, for any of these methods. It's emphatically *not* okay to have fewer. And as currently written, it reeeeeeallly reads like there are fewer. Let's have better names to not be confusing.
@@ +47,5 @@
> +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) {
> + *ptr = value;
> +}
> +inline void MemoryBarrier() {
> + __asm__ __volatile__("sync" : : : "memory"); }
Can you not use __sync_synchronize() here? That seems preferable to asm-goo to me. And put the closing brace on a separate line, let's at least try to be minimally style-consistent here. :-)
Attachment #8719232 -
Flags: review?(jwalden+bmo) → review+
| Assignee | ||
Comment 12•10 years ago
|
||
Jeff, I copied this file from upstream (chromium/v8) and only made very minimal changes so it compiles.
I don't mind making the changes it is just a question of how much we want this to diverge from upstream. Is it possible that we would take a newer version of this code from upstream at some point in the future, and if so wouldn't these changes just make things harder to merge/update
Comment 13•10 years ago
|
||
Oh, bah, upstream. I hadn't realized you got this from there. Carry on without my requested changes, then.
| Assignee | ||
Comment 14•10 years ago
|
||
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 15•10 years ago
|
||
has problems to apply:
applying 98b40f7c3e38
patching file ipc/chromium/src/base/atomicops.h
Hunk #1 FAILED at 136
1 out of 1 hunks FAILED -- saving rejects to file ipc/chromium/src/base/atomicops.h.rej
patch failed, unable to continue (try -v)
patch failed, rejects left in working directory
errors during apply, please fix and qrefresh 98b40f7c3e38
Flags: needinfo?(steve)
Keywords: checkin-needed
| Assignee | ||
Comment 16•10 years ago
|
||
| Assignee | ||
Updated•10 years ago
|
Attachment #8719232 -
Attachment is obsolete: true
Flags: needinfo?(steve)
| Assignee | ||
Updated•10 years ago
|
Keywords: checkin-needed
Comment 17•10 years ago
|
||
Keywords: checkin-needed
Comment 18•10 years ago
|
||
| bugherder | ||
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
status-firefox47:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla47
You need to log in
before you can comment on or make changes to this bug.
Description
•