CFI vcall requires one to specify a -fvisibility flag on the command line,
with hidden being the preffered. We set visibility explicitly in some
difficult-to-quickly-identify ways, and adding -fvisibility=hidden
triggered issues with NSS (as well as apparently being redundant to what we
currently do).  I tracked them in
https://bugzilla.mozilla.org/show_bug.cgi?id=1459314

That bug includes a monster patch to set visibility manually on a ton of
NSS stuff to get the browser running as a POC, but CFI vcall would need
something much more intelligent. I think the answer is to change the
compiler to not require the flag be present.

> For Firefox, simply having an equivalent to `-fvisilbility=hidden` so
that all the symbols in the generated static library are hidden would be
sufficient to meet our current needs

The understanding I got from my bug was that we were already doing the
equivalent of this... somehow.

-tom


On Thu, Aug 30, 2018 at 9:52 AM, Ted Mielczarek <t...@mielczarek.org> wrote:

> I thought we had filed a Rust issue on this but apparently not. There's
> some good discussion in this issue:
> https://github.com/rust-lang/rust/issues/37530
>
> For Firefox, simply having an equivalent to `-fvisilbility=hidden` so that
> all the symbols in the generated static library are hidden would be
> sufficient to meet our current needs, since we don't need to export any
> actual public APIs from Rust code. For that feature to be usable for more
> use cases you'd probably also want an equivalent to `__attribute__
> ((visibility ("default")))`, but I don't know what exactly that'd look like.
>
> -Ted
>
> On Wed, Aug 29, 2018, at 3:38 AM, Michael Woerister wrote:
> > For some background: The Rust compiler will mark everything as `hidden`
> in
> > LLVM IR unless it is exported via a C interface (via either #[no_mangle]
> or
> > #[export_name]). So the FFI symbols in gkrust will have default
> visibility.
> > LLD will thus probably retain and re-export them, even if they are not
> > called from within libXUL. But we should double-check that.
> >
> > It might be a good idea to provide a way to tell the Rust compiler to
> make
> > everything `hidden` by default.
> >
> > On Tue, Aug 28, 2018 at 3:56 PM, Till Schneidereit <
> > t...@tillschneidereit.net> wrote:
> >
> > > CC'ing mw, who is working on cross-language LTO.
> > >
> > > On Tue, Aug 28, 2018 at 3:20 PM Mike Hommey <m...@glandium.org> wrote:
> > >
> > >> On Tue, Aug 28, 2018 at 09:14:02AM -0400, Jeff Muizelaar wrote:
> > >> > We don't LTO yet on Mac.
> > >>
> > >> We don't LTO across languages on any platform yet. Rust is LTOed on
> all
> > >> platforms, which removes a bunch of its symbols. Everything that is
> > >> exposed for C/C++ from Rust, though, is left alone. That's likely to
> > >> stay true even with cross-language LTO, because as far as the linker
> is
> > >> concerned, those FFI symbols might be used by code that link against
> > >> libxul, so it would still export them. We'd essentially need the
> > >> equivalent to -fvisibility=hidden for Rust for that to stop being
> true.
> > >>
> > >> Mike
> > >>
> > >>
> > >> > On Tue, Aug 28, 2018 at 5:17 AM, Emilio Cobos Álvarez <
> emi...@crisal.io>
> > >> wrote:
> > >> > >
> > >> > >
> > >> > > On 8/28/18 9:35 AM, Henri Sivonen wrote:
> > >> > >>
> > >> > >> Does some lld mechanism successfully remove dead code when gkrust
> > >> > >> exports some FFI function that the rest of Gecko never ends up
> > >> > >> calling?
> > >> > >
> > >> > >
> > >> > > I would expect LTO to get rid of it, but haven't checked myself.
> > >> > >
> > >> > >> I.e. in terms of code size, is it OK to vendor an FFI-exposing
> Rust
> > >> > >> crate where not every FFI function is used (at least right away)?
> > >> > >>
> > >> > > _______________________________________________
> > >> > > dev-platform mailing list
> > >> > > dev-platform@lists.mozilla.org
> > >> > > https://lists.mozilla.org/listinfo/dev-platform
> > >> > _______________________________________________
> > >> > dev-platform mailing list
> > >> > dev-platform@lists.mozilla.org
> > >> > https://lists.mozilla.org/listinfo/dev-platform
> > >> _______________________________________________
> > >> dev-platform mailing list
> > >> dev-platform@lists.mozilla.org
> > >> https://lists.mozilla.org/listinfo/dev-platform
> > >>
> > >
> > _______________________________________________
> > dev-platform mailing list
> > dev-platform@lists.mozilla.org
> > https://lists.mozilla.org/listinfo/dev-platform
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
>
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to