aboutsummaryrefslogtreecommitdiff
path: root/ffi/src/write_sink.rs
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2021-03-13 14:19:55 -0800
committeriximeow <me@iximeow.net>2021-03-13 14:54:47 -0800
commit93c53657c2289e979672ee6c4612af7e9eac109c (patch)
treea0acdc143595f64a796827bc849a122dd49cc4e3 /ffi/src/write_sink.rs
parent6232e8b1daf7067cb2e8065687530d5f88ecb46d (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.rs20
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(())
+ }
+}
+