Closed Bug 1581427 Opened 5 years ago Closed 5 years ago

objdir/dist/include/nsIHttpChannel.h:251:27: error: unknown type name 'UniqueProfilerBacktrace'

Categories

(Core :: Gecko Profiler, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla71
Tracking Status
firefox71 --- fixed

People

(Reporter: jbeich, Assigned: bas.schouten)

References

(Regression)

Details

(Keywords: regression)

Attachments

(1 file)

GeckoProfiler is not supported on Tier3 platforms: Linux powerpc/sparc/s390x, DragonFly/FreeBSD/NetBSD/OpenBSD, Solaris. Until bug 1371159 reproducing on Tier1 requires hacking gecko_profiler() in toolkit/moz.configure to return None.

$ c++ --version
FreeBSD clang version 8.0.1 (tags/RELEASE_801/final 366581) (based on LLVM 8.0.1)
Target: x86_64-unknown-freebsd13.0
Thread model: posix
InstalledDir: /usr/bin

$ rustc -vV
rustc 1.39.0-nightly
binary: rustc
commit-hash: a6946a817a1345ce739acd8b12255c0a595e9b39
commit-date: 2019-09-13
host: x86_64-unknown-freebsd
release: 1.39.0-nightly
LLVM version: 9.0
$ ./mach bootstrap
$ ./mach build
[...]
[style 0.0.1] cargo:rerun-if-changed=build_gecko.rs
[style 0.0.1] cargo:rerun-if-changed=objdir/layout/style/bindgen.toml
[style 0.0.1] cargo:rerun-if-changed=layout/style/ServoBindings.toml
[...]
objdir/dist/include/nsIHttpChannel.h:251:27: error: unknown type name 'UniqueProfilerBacktrace', err: true
thread 'main' panicked at 'Failed to generate bindings, flags: ["objdir/dist/include/GeckoProfiler.h", ...]',
  servo/components/style/build_gecko.rs:192:13
stack backtrace:
   0:          0x12e2b07 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd5babae120fb09d5
   1:          0x12fc1c1 - core::fmt::write::h89de83151e33fa64
   2:          0x12dea72 - std::io::Write::write_fmt::hed853f77c08d92a5
   3:          0x12d1a5d - std::panicking::default_hook::{{closure}}::ha01368b259222fe0
   4:          0x12d1784 - std::panicking::default_hook::ha6060fc624ff0ae5
   5:          0x12d2155 - std::panicking::rust_panic_with_hook::hb8425dae7984dcac
   6:          0x12d1cf7 - std::panicking::continue_panic_fmt::hbbe5ab25243a40d8
   7:          0x12d1c47 - std::panicking::begin_panic_fmt::h278ba6fee46e57b4
   8:          0x111465d - build_script_build::build_gecko::generate_structs::ha3122a2bcdee4ffa
   9:          0x11161b0 - build_script_build::main::h20c5775070929d10
  10:          0x10fce46 - std::rt::lang_start::{{closure}}::h1eb4abb3a12ea798
  11:          0x12d1b78 - std::panicking::try::do_call::h25644839f24dcd8b
  12:          0x12e333f - __rust_maybe_catch_panic
  13:          0x12d6e6d - std::rt::lang_start_internal::h7cbdf229ab61a40e
  14:          0x1116c6a - main
  15:          0x10fa11d - _start
                               at /usr/src/lib/csu/amd64/crt1.c:76

On windows other stuff doesn't compile either when I apply that hack to moz.configure :(. I'll try to figure it out though.

Assignee: nobody → bas
Status: NEW → ASSIGNED

This feels like the least invasive way of doing this. It'd be nice to prevent littering the code itself with #ifdefs.

With this patch, linking fails on ppc64le with a whole bunch of repeated complaints about multiple definitions:

20:08.37 /usr/bin/ld.bfd: ../../../security/apps/Unified_cpp_security_apps0.o: in function `profiler_get_backtrace()':
20:08.37 /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/GeckoProfiler.h:76: multiple definition of `profiler_get_backtrace()'; ../../../security/certverifier/Unified_cpp_certverifier0.o:/home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/GeckoProfiler.h:76: first defined here
20:08.37 /usr/bin/ld.bfd: ../../../xpcom/base/nsDumpUtils.o: in function `profiler_get_backtrace()':
20:08.37 /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/GeckoProfiler.h:76: multiple definition of `profiler_get_backtrace()'; ../../../security/certverifier/Unified_cpp_certverifier0.o:/home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/GeckoProfiler.h:76: first defined here

This is incredibly cheesy, but instead of actually having a function, hacking in

#define profiler_get_backtrace() nullptr

compiles and works. I don't know how acceptable that is.

FreeBSD amd64 hits the same error as comment 4. Maybe mark profiler_get_backtrace as inline or static inline (plain static triggers -Werror=unused-function). If you go macro try to align with bug 1403868 intent.

toolkit/library/build/libxul.so
ld.lld: error: duplicate symbol: profiler_get_backtrace()
>>> defined at Unified_cpp_certverifier0.cpp
>>>            ../../../security/certverifier/Unified_cpp_certverifier0.o:(profiler_get_backtrace())
>>> defined at Unified_cpp_security_apps0.cpp
>>>            ../../../security/apps/Unified_cpp_security_apps0.o:(.text._Z22profiler_get_backtracev+0x0)
[...]
ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
Attachment #9093171 - Attachment description: Bug 1581427: Define UniqueProfilerBacktrace and profiler_get_backtrace() to be no-ops on a build without profiling. r=mstange → Bug 1581427: Define UniqueProfilerBacktrace and profiler_get_backtrace() to be no-ops on a build without profiling. r=njn
Pushed by bschouten@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/29b8be50a6f4
Define UniqueProfilerBacktrace and profiler_get_backtrace() to be no-ops on a build without profiling. r=njn
Status: ASSIGNED → RESOLVED
Closed: 5 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla71
Has Regression Range: --- → yes
Keywords: regression
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: