From 7ca7f6728f87edd4862772a084b7fcbbfbc3971a Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Tue, 12 Apr 2022 21:57:55 +0200 Subject: [PATCH] TT Tool: Check arch through kernel ELF --- .../Makefile | 4 +-- .../README.md | 27 ++++++++++--------- .../translation_table_tool/kernel_elf.rb | 4 +++ .../translation_table_tool/main.rb | 11 ++++---- .../Makefile | 4 +-- .../translation_table_tool/kernel_elf.rb | 4 +++ .../translation_table_tool/main.rb | 11 ++++---- 7 files changed, 37 insertions(+), 28 deletions(-) diff --git a/15_virtual_mem_part3_precomputed_tables/Makefile b/15_virtual_mem_part3_precomputed_tables/Makefile index e33b1b56..15dc5af0 100644 --- a/15_virtual_mem_part3_precomputed_tables/Makefile +++ b/15_virtual_mem_part3_precomputed_tables/Makefile @@ -172,7 +172,7 @@ $(KERNEL_ELF_RAW): $(KERNEL_ELF_RAW_DEPS) $(KERNEL_ELF_TTABLES): $(KERNEL_ELF_TTABLES_DEPS) $(call color_header, "Precomputing kernel translation tables and patching kernel ELF") @cp $(KERNEL_ELF_RAW) $(KERNEL_ELF_TTABLES) - @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $(KERNEL_ELF_TTABLES) + @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $(KERNEL_ELF_TTABLES) ##------------------------------------------------------------------------------ ## Generate the stripped kernel binary @@ -316,7 +316,7 @@ define KERNEL_TEST_RUNNER TEST_ELF=$$(echo $$1 | sed -e 's/.*target/target/g') TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') - $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $$TEST_ELF > /dev/null + $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $$TEST_ELF > /dev/null $(OBJCOPY_CMD) $$TEST_ELF $$TEST_BINARY $(DOCKER_TEST) $(EXEC_TEST_DISPATCH) $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef diff --git a/15_virtual_mem_part3_precomputed_tables/README.md b/15_virtual_mem_part3_precomputed_tables/README.md index f24fb3c9..37d157cc 100644 --- a/15_virtual_mem_part3_precomputed_tables/README.md +++ b/15_virtual_mem_part3_precomputed_tables/README.md @@ -615,8 +615,8 @@ BSP = case BSP_TYPE raise end -TRANSLATION_TABLES = case TARGET - when :aarch64 +TRANSLATION_TABLES = case KERNEL_ELF.machine + when :AArch64 Arch::ARMv8::TranslationTable.new else raise @@ -856,7 +856,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/Makefile 15_virtual_mem_part3_precompu +$(KERNEL_ELF_TTABLES): $(KERNEL_ELF_TTABLES_DEPS) + $(call color_header, "Precomputing kernel translation tables and patching kernel ELF") + @cp $(KERNEL_ELF_RAW) $(KERNEL_ELF_TTABLES) -+ @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $(KERNEL_ELF_TTABLES) ++ @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $(KERNEL_ELF_TTABLES) + +##------------------------------------------------------------------------------ ## Generate the stripped kernel binary @@ -873,7 +873,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/Makefile 15_virtual_mem_part3_precompu TEST_ELF=$$(echo $$1 | sed -e 's/.*target/target/g') TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') -+ $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $$TEST_ELF > /dev/null ++ $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $$TEST_ELF > /dev/null $(OBJCOPY_CMD) $$TEST_ELF $$TEST_BINARY $(DOCKER_TEST) $(EXEC_TEST_DISPATCH) $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef @@ -2458,7 +2458,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/generic.rb 15_v diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/kernel_elf.rb 15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb --- 14_virtual_mem_part2_mmio_remap/translation_table_tool/kernel_elf.rb +++ 15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb -@@ -0,0 +1,92 @@ +@@ -0,0 +1,96 @@ +# frozen_string_literal: true + +# SPDX-License-Identifier: MIT OR Apache-2.0 @@ -2474,6 +2474,10 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/kernel_elf.rb 1 + @symtab_section = @elf.section_by_name('.symtab') + end + ++ def machine ++ @elf.machine.to_sym ++ end ++ + def symbol_value(symbol_name) + @symtab_section.symbol_by_name(symbol_name).header.st_value + end @@ -2555,7 +2559,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/kernel_elf.rb 1 diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/main.rb 15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb --- 14_virtual_mem_part2_mmio_remap/translation_table_tool/main.rb +++ 15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb -@@ -0,0 +1,47 @@ +@@ -0,0 +1,46 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + @@ -2563,10 +2567,6 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/main.rb 15_virt +# +# Copyright (c) 2021-2022 Andre Richter + -+TARGET = ARGV[0].split('-').first.to_sym -+BSP_TYPE = ARGV[1].to_sym -+kernel_elf_path = ARGV[2] -+ +require 'rubygems' +require 'bundler/setup' +require 'colorize' @@ -2577,6 +2577,9 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/main.rb 15_virt +require_relative 'bsp' +require_relative 'arch' + ++BSP_TYPE = ARGV[0].to_sym ++kernel_elf_path = ARGV[1] ++ +start = Time.now + +KERNEL_ELF = KernelELF.new(kernel_elf_path) @@ -2588,8 +2591,8 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/translation_table_tool/main.rb 15_virt + raise + end + -+TRANSLATION_TABLES = case TARGET -+ when :aarch64 ++TRANSLATION_TABLES = case KERNEL_ELF.machine ++ when :AArch64 + Arch::ARMv8::TranslationTable.new + else + raise diff --git a/15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb b/15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb index 80d00f71..f2d5b0b7 100644 --- a/15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb +++ b/15_virtual_mem_part3_precomputed_tables/translation_table_tool/kernel_elf.rb @@ -13,6 +13,10 @@ class KernelELF @symtab_section = @elf.section_by_name('.symtab') end + def machine + @elf.machine.to_sym + end + def symbol_value(symbol_name) @symtab_section.symbol_by_name(symbol_name).header.st_value end diff --git a/15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb b/15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb index fe69fb33..6419e364 100755 --- a/15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb +++ b/15_virtual_mem_part3_precomputed_tables/translation_table_tool/main.rb @@ -5,10 +5,6 @@ # # Copyright (c) 2021-2022 Andre Richter -TARGET = ARGV[0].split('-').first.to_sym -BSP_TYPE = ARGV[1].to_sym -kernel_elf_path = ARGV[2] - require 'rubygems' require 'bundler/setup' require 'colorize' @@ -19,6 +15,9 @@ require_relative 'kernel_elf' require_relative 'bsp' require_relative 'arch' +BSP_TYPE = ARGV[0].to_sym +kernel_elf_path = ARGV[1] + start = Time.now KERNEL_ELF = KernelELF.new(kernel_elf_path) @@ -30,8 +29,8 @@ BSP = case BSP_TYPE raise end -TRANSLATION_TABLES = case TARGET - when :aarch64 +TRANSLATION_TABLES = case KERNEL_ELF.machine + when :AArch64 Arch::ARMv8::TranslationTable.new else raise diff --git a/16_virtual_mem_part4_higher_half_kernel/Makefile b/16_virtual_mem_part4_higher_half_kernel/Makefile index e33b1b56..15dc5af0 100644 --- a/16_virtual_mem_part4_higher_half_kernel/Makefile +++ b/16_virtual_mem_part4_higher_half_kernel/Makefile @@ -172,7 +172,7 @@ $(KERNEL_ELF_RAW): $(KERNEL_ELF_RAW_DEPS) $(KERNEL_ELF_TTABLES): $(KERNEL_ELF_TTABLES_DEPS) $(call color_header, "Precomputing kernel translation tables and patching kernel ELF") @cp $(KERNEL_ELF_RAW) $(KERNEL_ELF_TTABLES) - @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $(KERNEL_ELF_TTABLES) + @$(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $(KERNEL_ELF_TTABLES) ##------------------------------------------------------------------------------ ## Generate the stripped kernel binary @@ -316,7 +316,7 @@ define KERNEL_TEST_RUNNER TEST_ELF=$$(echo $$1 | sed -e 's/.*target/target/g') TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g') - $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(TARGET) $(BSP) $$TEST_ELF > /dev/null + $(DOCKER_TOOLS) $(EXEC_TT_TOOL) $(BSP) $$TEST_ELF > /dev/null $(OBJCOPY_CMD) $$TEST_ELF $$TEST_BINARY $(DOCKER_TEST) $(EXEC_TEST_DISPATCH) $(EXEC_QEMU) $(QEMU_TEST_ARGS) -kernel $$TEST_BINARY endef diff --git a/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/kernel_elf.rb b/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/kernel_elf.rb index 80d00f71..f2d5b0b7 100644 --- a/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/kernel_elf.rb +++ b/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/kernel_elf.rb @@ -13,6 +13,10 @@ class KernelELF @symtab_section = @elf.section_by_name('.symtab') end + def machine + @elf.machine.to_sym + end + def symbol_value(symbol_name) @symtab_section.symbol_by_name(symbol_name).header.st_value end diff --git a/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/main.rb b/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/main.rb index fe69fb33..6419e364 100755 --- a/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/main.rb +++ b/16_virtual_mem_part4_higher_half_kernel/translation_table_tool/main.rb @@ -5,10 +5,6 @@ # # Copyright (c) 2021-2022 Andre Richter -TARGET = ARGV[0].split('-').first.to_sym -BSP_TYPE = ARGV[1].to_sym -kernel_elf_path = ARGV[2] - require 'rubygems' require 'bundler/setup' require 'colorize' @@ -19,6 +15,9 @@ require_relative 'kernel_elf' require_relative 'bsp' require_relative 'arch' +BSP_TYPE = ARGV[0].to_sym +kernel_elf_path = ARGV[1] + start = Time.now KERNEL_ELF = KernelELF.new(kernel_elf_path) @@ -30,8 +29,8 @@ BSP = case BSP_TYPE raise end -TRANSLATION_TABLES = case TARGET - when :aarch64 +TRANSLATION_TABLES = case KERNEL_ELF.machine + when :AArch64 Arch::ARMv8::TranslationTable.new else raise