diff options
author | iximeow <me@iximeow.net> | 2021-03-13 14:19:55 -0800 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2021-03-13 14:54:47 -0800 |
commit | 93c53657c2289e979672ee6c4612af7e9eac109c (patch) | |
tree | a0acdc143595f64a796827bc849a122dd49cc4e3 /ffi/src/write_sink.rs | |
parent | 6232e8b1daf7067cb2e8065687530d5f88ecb46d (diff) |
split ffi crate to support distinct 16, 32, and 64-bit builds
initial work to optionally discard any instruction printing support
when using `-Z build-std` to fully remove .eh_frame, a stripped
long_mode_no_fmt .so is 61kb!
Diffstat (limited to 'ffi/src/write_sink.rs')
-rw-r--r-- | ffi/src/write_sink.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ffi/src/write_sink.rs b/ffi/src/write_sink.rs new file mode 100644 index 0000000..b188498 --- /dev/null +++ b/ffi/src/write_sink.rs @@ -0,0 +1,20 @@ +pub struct InstructionSink<'buf> { + pub buf: &'buf mut [u8], + pub offs: usize, +} + +impl<'a> core::fmt::Write for InstructionSink<'a> { + fn write_str(&mut self, s: &str) -> core::fmt::Result { + for b in s.bytes() { + if self.offs < self.buf.len() { + self.buf[self.offs] = b; + self.offs += 1; + } else { + break; + } + } + + Ok(()) + } +} + |