From 7b0419c45b3edb09c7b216e4db795f9a850bb26a Mon Sep 17 00:00:00 2001 From: "Sergey V. Galtsev" Date: Sat, 19 Aug 2017 22:16:18 +0300 Subject: Fix typo. --- src/shared/segmentation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/shared/segmentation.rs') diff --git a/src/shared/segmentation.rs b/src/shared/segmentation.rs index e836d42..bdf90e6 100644 --- a/src/shared/segmentation.rs +++ b/src/shared/segmentation.rs @@ -246,7 +246,7 @@ bitflags! { const FLAGS_L = 1 << 5, /// Default operation size (0 = 16-bit segment, 1 = 32-bit segment). const FLAGS_DB = 1 << 6, - /// Granularity (0 = limit in bytes, 1 = limt in 4 KiB Pages). + /// Granularity (0 = limit in bytes, 1 = limit in 4 KiB Pages). const FLAGS_G = 1 << 7, } -- cgit v1.2.3 From 17c4e7c8eceeb513b14c668e57d3ef4074a31fa2 Mon Sep 17 00:00:00 2001 From: "Sergey V. Galtsev" Date: Sat, 19 Aug 2017 22:20:03 +0300 Subject: Fix setting of the granularity flag for a segment descriptor. --- src/shared/segmentation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/shared/segmentation.rs') diff --git a/src/shared/segmentation.rs b/src/shared/segmentation.rs index bdf90e6..e3927c0 100644 --- a/src/shared/segmentation.rs +++ b/src/shared/segmentation.rs @@ -232,7 +232,7 @@ impl SegmentDescriptor { | descriptor::Flags::from_priv(dpl), limit1: limit1, limit2_flags: FLAGS_DB - | if fine_grained { FLAGS_G } else { Flags::empty() } + | if fine_grained { Flags::empty() } else { FLAGS_G } | Flags::from_limit2(limit2), } } -- cgit v1.2.3 From 8a69ec3486110766c6e1fe13e449e81c5e0d147a Mon Sep 17 00:00:00 2001 From: "Sergey V. Galtsev" Date: Sat, 19 Aug 2017 22:30:31 +0300 Subject: Fix assert in Flags::from_limit2() - limit2 is 4 bits wide, not 3. --- src/shared/segmentation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/shared/segmentation.rs') diff --git a/src/shared/segmentation.rs b/src/shared/segmentation.rs index e3927c0..2e4e6e1 100644 --- a/src/shared/segmentation.rs +++ b/src/shared/segmentation.rs @@ -256,7 +256,7 @@ impl Flags { pub const BLANK: Flags = Flags { bits: 0 }; pub fn from_limit2(limit2: u8) -> Flags { - assert_eq!(limit2 & !0b111, 0); + assert_eq!(limit2 & !0b1111, 0); Flags { bits: limit2 } } } -- cgit v1.2.3 From 950fba61c26268a8534722bc397938785cfb9731 Mon Sep 17 00:00:00 2001 From: "Sergey V. Galtsev" Date: Sat, 19 Aug 2017 23:29:32 +0300 Subject: Set FLAGS_PRESENT for a descriptor in SegmentDescriptor::new(). --- src/shared/segmentation.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/shared/segmentation.rs') diff --git a/src/shared/segmentation.rs b/src/shared/segmentation.rs index 2e4e6e1..182c3a9 100644 --- a/src/shared/segmentation.rs +++ b/src/shared/segmentation.rs @@ -229,7 +229,8 @@ impl SegmentDescriptor { base2: ((base as usize & 0xFF0000) >> 16) as u8, base3: ((base as usize & 0xFF000000) >> 24) as u8, access: descriptor::Flags::from_type(ty1) - | descriptor::Flags::from_priv(dpl), + | descriptor::Flags::from_priv(dpl) + | descriptor::FLAGS_PRESENT, limit1: limit1, limit2_flags: FLAGS_DB | if fine_grained { Flags::empty() } else { FLAGS_G } -- cgit v1.2.3 From 31183183e4dd295b8f48c21873a8cdfa60ba3c7d Mon Sep 17 00:00:00 2001 From: "Sergey V. Galtsev" Date: Mon, 21 Aug 2017 01:08:47 +0300 Subject: Fix the bit representation of the data and code segment types. --- src/shared/segmentation.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/shared/segmentation.rs') diff --git a/src/shared/segmentation.rs b/src/shared/segmentation.rs index 182c3a9..fbbaf34 100644 --- a/src/shared/segmentation.rs +++ b/src/shared/segmentation.rs @@ -174,8 +174,8 @@ pub enum Type { impl Type { pub fn pack(self) -> u8 { match self { - Type::Data(d) => d.bits | 0b0_000, - Type::Code(c) => c.bits | 0b1_000, + Type::Data(d) => d.bits | 0b10_000, + Type::Code(c) => c.bits | 0b11_000, } } } -- cgit v1.2.3