Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Jun 2022 22:01:21 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Michael Yan Ka Chiu <nyan@myuji.xyz>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Help needed to get Rust dtrace USDT working on/with FreeBSD linker
Message-ID:  <Ypz9gaGQ/Nqja5kF@kib.kiev.ua>
In-Reply-To: <f5c27ce0-0dc7-467f-b293-857c74125648@www.fastmail.com>
References:  <f5c27ce0-0dc7-467f-b293-857c74125648@www.fastmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jun 05, 2022 at 04:26:37PM +0800, Michael Yan Ka Chiu wrote:
> Hi everyone,
> 
> I’m working on a PR to get the Rust Usdt crate working on FreeBSD. This crate
> basically allow adding DTrace probes to rust sources by compiling the probe during
> macro invocation and embed to a custom section (set_dtrace_probe) using inline 
> assembly.
> 
> The problem I am encountering is that the linker will optimize the compiled probes
> out in the custom section, the only workaround I have found is to force the linker to
> link all the dead code by invoking `-C link-dead-code=yes`. On Illumos, the workaround
> is to reference another section such that the Illumos linker will not throw the probes 
> away; however the same workaround does not work on FreeBSD.
> 
> I wonder if there're any tricks similar to the Illumos fix, by putting some inline asm there
> to trick the linker and not throw out the probes.
> 
> Thanks In advance,
> Michael
> 
> References:
> The PR: https://github.com/oxidecomputer/usdt/pull/63
> The illumos fix: https://github.com/oxidecomputer/usdt/blob/eac0fe5f03c3fbf23468ead5cb140f62d51ac3f3/usdt-impl/src/record.rs#L251
> 
>  

GNU as seems to gain support for the "R" flag for sections, which should
prevent them from linker GC.  Not sure if llvm toolchain has this, it
requires both as and lld to recognize the flag.

Anyway, try it?  See GNU as documentation for the .section directive,
ELF type flags.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Ypz9gaGQ/Nqja5kF>