From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001
From: Valentin Popov <valentin@popov.link>
Date: Mon, 8 Jan 2024 01:21:28 +0400
Subject: Initial vendor packages

Signed-off-by: Valentin Popov <valentin@popov.link>
---
 vendor/gimli/src/test_util.rs | 53 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100644 vendor/gimli/src/test_util.rs

(limited to 'vendor/gimli/src/test_util.rs')

diff --git a/vendor/gimli/src/test_util.rs b/vendor/gimli/src/test_util.rs
new file mode 100644
index 0000000..706aaf9
--- /dev/null
+++ b/vendor/gimli/src/test_util.rs
@@ -0,0 +1,53 @@
+#![allow(missing_docs)]
+
+use crate::Format;
+use test_assembler::{Label, Section};
+
+pub trait GimliSectionMethods {
+    fn sleb(self, val: i64) -> Self;
+    fn uleb(self, val: u64) -> Self;
+    fn initial_length(self, format: Format, length: &Label, start: &Label) -> Self;
+    fn word(self, size: u8, val: u64) -> Self;
+    fn word_label(self, size: u8, val: &Label) -> Self;
+}
+
+impl GimliSectionMethods for Section {
+    fn sleb(mut self, mut val: i64) -> Self {
+        while val & !0x3f != 0 && val | 0x3f != -1 {
+            self = self.D8(val as u8 | 0x80);
+            val >>= 7;
+        }
+        self.D8(val as u8 & 0x7f)
+    }
+
+    fn uleb(mut self, mut val: u64) -> Self {
+        while val & !0x7f != 0 {
+            self = self.D8(val as u8 | 0x80);
+            val >>= 7;
+        }
+        self.D8(val as u8)
+    }
+
+    fn initial_length(self, format: Format, length: &Label, start: &Label) -> Self {
+        match format {
+            Format::Dwarf32 => self.D32(length).mark(start),
+            Format::Dwarf64 => self.D32(0xffff_ffff).D64(length).mark(start),
+        }
+    }
+
+    fn word(self, size: u8, val: u64) -> Self {
+        match size {
+            4 => self.D32(val as u32),
+            8 => self.D64(val),
+            _ => panic!("unsupported word size"),
+        }
+    }
+
+    fn word_label(self, size: u8, val: &Label) -> Self {
+        match size {
+            4 => self.D32(val),
+            8 => self.D64(val),
+            _ => panic!("unsupported word size"),
+        }
+    }
+}
-- 
cgit v1.2.3