Skip to content

Latest commit

 

History

History
333 lines (203 loc) · 16.3 KB

Changelog.md

File metadata and controls

333 lines (203 loc) · 16.3 KB

Unreleased

0.11.4 – 2023-07-05

0.11.3 – 2023-03-26

0.11.2 – 2023-03-12

  • Fix internal error in Cargo.toml setup that prevented publishing 0.11.1

0.11.1 – 2023-03-12

Features

Fixes

Other improvements

0.11.0 – 2022-12-01

Major rewrite of the bootloader crate with various breaking changes:

  • Separate API crate: The bootloader is now split into two parts: An API crate to make kernels loadable by the bootloader and the actual bootloader implementation. This makes the build process for kernels much easier and faster.
  • New config system: Instead of configuring the bootloader via a special table in the Cargo.toml, the configuration now happens through a normal Rust struct, which is part of the entry_point! macro. The macro then serializes the config struct at compile time and places it in a special ELF output section. The compile time serialization happens through a manually implemented const fn of the config struct.
  • Load the kernel at runtime: The bootloader is now able to load files from FAT partitions at runtime. Thus, we don't need to link the kernel into the bootloader executable anymore. As a result, we don't need to recompile the bootloader on kernel changes anymore. We also load the config at runtime from the kernel's ELF section, which eliminates the second reason for recompiling the bootloader as well.
  • Split into sub-crates: Since the bootloader build process does not need access to the kernel executable or its Cargo.toml anymore, we can build the different parts of the bootloader independently. For example, the BIOS boot sector is now a separate crate, and the UEFI bootloader is too.
  • Library to create disk images: To create an abstraction the complex build steps of the different bootloader executables, we compile them inside cargo build scripts. At the top level, we provide a bootloader library crate, which compiles everything as part of its build script. This library includes functions for creating BIOS and UEFI disk images for a given kernel. These functions can be used e.g. from a builder crate or a build script of the downstream operating system.

See our migration guides for details.

0.10.13 – 2022-09-25

  • Add dynamic range configuration (#229)
  • Fix boot for machines that report memory regions at high physical addresses (see #259)
    • Limit BIOS bootloader's max_phys_addr to 4 GiB (#260)
    • fix get_free_address for large sizes (0.10) (#263)
    • Only perform a single TLB flush after identity mapping (#265)
  • Correct typos in src/binary/level_4_entries.rs (#228)

0.10.12 – 2022-02-06

  • Add support for position independent executables (#206)
  • Add optional ASLR (#221)
  • Logger: nicer font rendering into framebuffer (#213)
  • Fix warnings on latest nightly (maybe_uninit_extra is no longer feature-gated) (#222)
  • Rework UsedLevel4Entries (#219)
  • Add small doc-comment to entry_point! macro (#220)

0.10.11 – 2022-01-09

  • Remove feature flag for lang_items, asm and global_asm (#210)
  • Use set_reg method of CS, DS, ES and SS segment structs (#211)

0.10.10 – 2021-12-23

  • Fix asm imports on latest nightly (#209)

0.10.9 – 2021-10-07

  • Add support for framebuffer configuration (#179)

0.10.8 – 2021-08-22

  • Pad UEFI FAT file length (#180)
  • Also check cfg gated target field for bootloader dependency (#182

0.10.7 – 2021-08-09

  • Fix relocation-model field name in the target spec json (#186)
    • This effectively changes the relocation-model from pic to static. Please report if you encounter any issues because of this.
    • This fixes the compilation warnings on the latest nightlies.

0.10.6 – 2021-05-24

  • Identity-map GDT into kernel address space to fix iretq (#175)
  • Uefi: Look for an ACPI2 RSDP first (#174)
  • Don't check target architecture for builder crate to support cross-compiling (#176)

0.10.5 – 2021-05-21

  • Fix build on latest Rust nightlies by updating uefi-rs dependency (#170)
    • Also: Fix warnings about .intel_syntax attribute in assembly code

0.10.4 – 2021-05-14

  • Fix build on latest Rust nightly by updating to uefi v0.9.0 (#162)
  • Fix higher half kernels by identity mapping context switch fn earlier (#161)
    • Also: improve reporting of mapping errors

0.10.3 – 2021-05-05

  • Change register used in setting SS in stage_4 (#156)

0.10.2 – 2021-04-30

  • Use new asm! syntax instead of deprecated llvm_asm! (#154)
  • Reduce the number of used unstable features of x86_64 crate (#155)

0.10.1 – 2021-04-07

  • Fix docs.rs build: Don't enable any features

0.10.0 – 2021-04-06

  • Rewrite for UEFI support (#130)
    • Includes a new build process that no longer uses the bootimage crate. See the Readme for details.

0.9.19 _(backport) – 2021-08-09

  • Set relocation-model: static and panic-strategy: abort and fix .intel_syntax warnings (#185)
    • Fixes warnings on the latest Rust nightlies.
    • This effectively changes the relocation-model and panic-strategy. Please report if you encounter any issues because of this.

0.9.18 (hotfix) – 2021-05-20

  • Fix nightly regression by manually passing --gc-sections (#168)

0.9.17 (backport) – 2021-04-30

  • Reduce the number of used unstable features of x86_64 crate (backport #155)

0.9.16 – 2021-03-07

  • Replace all remaining leas with mov + offset (#140)

0.9.15 – 2021-03-07

  • Fix linker errors on latest nightlies (#139)

0.9.14 – 2021-02-24

  • Fix "panic message is not a string literal" warning (#138)

0.9.13 – 2021-02-24

(accidental release)

0.9.12 – 2021-02-02

  • Fix build on latest nightly by updating x86_64 to v0.13.2 (#135)

0.9.11 – 2020-09-29

  • Update Cargo.lock to fix nightly breakage (#129)

0.9.10 – 2020-09-24

  • Update x86_64 again to version 0.12.1 to fix const fn-related build errors on latest nightly

0.9.9 – 2020-09-20

  • Run cargo update to fix build errors of x86_64 on latest nightly

0.9.8 – 2020-07-17

  • Enable rlibc dependency only with binary feature (#126)

0.9.7 – 2020-07-17

  • Make bootloader buildable with -Zbuild-std (#125)

0.9.6 – 2020-07-16

  • Change 1st stage int 13h addressing (#123)

0.9.5

  • Fix warning by renaming _improper_ctypes_check functions (#122)

0.9.4

  • Add recursive_idx for boot info (#116)
  • Remove unused feature gates (#118)

0.9.3

  • Update x86_64 dependency to version 0.11.0 (#117)

0.9.2

  • Nightly Breakage: Use llvm_asm! instead of deprecated asm! (#108)

0.9.1

  • SSE feature: remove inline assembly + don't set reserved bits (#105)

0.9.0

  • Breaking: Identity-map complete vga region (0xa0000 to 0xc0000) (#104)

0.8.9

  • Implement boot-info-address (#101)

0.8.8

  • Add basic support for ELF thread local storage segments (#96)

0.8.7

  • Fix docs.rs build (see commit 01671dbe449b85b3c0ea73c5796cc8f9661585ee)

0.8.6

  • Objcopy replaces . chars with _ chars (#94)

0.8.5

  • Update x86_64 dependency (#92)

0.8.4

  • Move architecture checks from build script into lib.rs (#91)

0.8.3

  • Remove unnecessary extern C on panic handler to fix not-ffi-safe warning (#85)

0.8.2

  • Change the way the kernel entry point is called to honor alignment ABI (#81)

0.8.1

  • Add a Cargo Feature for Enabling SSE (#77)

0.8.0

  • Breaking: Parse bootloader configuration from kernel's Cargo.toml (#73)
    • At least version 0.7.7 of bootimage is required now.
  • Configurable kernel stack size, better non-x86_64 errors (#72)
  • Dynamically map kernel stack, boot info, physical memory and recursive table (#71)

0.7.1

  • Run cargo update (improves compile times because of trimmed down upstream dependencies)

0.7.0

  • Breaking: Only include dependencies when binary feature is enabled (#68)
    • For manual builds, the binary feature must be enabled when building
    • For builds using bootimage, at least version 0.7.6 of bootimage is required now.

0.6.4

  • Use volatile accesses in VGA code and make font dependency optional (#67)
    • Making the dependency optional should improve compile times when the VGA text mode is used.

0.6.3

  • Update CI badge, use latest version of x86_64 crate and rustfmt (#63)

0.6.2

  • Remove stabilized publish-lockfile feature (#62)

0.6.1

  • Make the physical memory offset configurable through a BOOTLOADER_PHYSICAL_MEMORY_OFFSET environment variable (#58).
  • Use a stripped copy of the kernel binary (debug info removed) to reduce load times (#59).

0.6.0

  • Breaking: Don't set the #[cfg(not(test))] attribute for the entry point function in the entry_point macro
    • With custom test frameworks, it's possible to use the normal entry point also in test environments
    • To get the old behavior, you can add the #[cfg(not(test))] attribute to the entry_point invocation
  • Additional assertions for the passed KERNEL executable
    • check that the executable exists (for better error messages)
    • check that the executable has a non-empty text section (an empty text section occurs when no entry point is set)

0.5.3

  • Mention minimal required bootimage version in error message when KERNEL environment variable is not set.

0.5.2

  • Remove redundant import that caused a warning

0.5.1

  • Add a package.metadata.bootloader.target key to the Cargo.toml that can be used by tools such as bootimage.

0.5.0

  • Breaking: Change the build system: Use a build script that expects a KERNEL environment variable instead of using a separate builder executable as before. See #51 and #53 for more information.
    • This makes the bootloader incompatible with versions 0.6.* and earlier of the bootimage tool.
    • The bootloader also requires the llvm-tools-preview rustup component now.

0.4.0

Breaking

  • The level 4 page table is only recursively mapped if the recursive_page_table feature is enabled.
  • Rename BootInfo::p4_table_addr to BootInfo::recursive_page_table_addr (only present if the cargo feature is enabled)
  • Remove From<PhysFrameRange> implementations for x86_64 FrameRange
    • This only works when the versions align, so it is not a good general solution.
  • Remove unimplemented BootInfo::package field.
  • Make BootInfo non-exhaustive so that we can add additional fields later.

Other

  • Add a map_physical_memory feature that maps the complete physical memory to the virtual address space at BootInfo::physical_memory_offset.
  • Re-export BootInfo at the root.