#!/usr/bin/env expect ## # Generate assembly code aggregating boot-module data from specified files. # proc generate_boot_modules_asm {modules} { # architecture dependent definitions set address_type ".quad" # header set asm_src {} append asm_src ".set MIN_PAGE_SIZE_LOG2, 12\n" append asm_src ".set DATA_ACCESS_ALIGNM_LOG2, 3\n" append asm_src "\n" append asm_src ".section .data\n" append asm_src "\n" append asm_src ".p2align DATA_ACCESS_ALIGNM_LOG2\n" append asm_src ".global _boot_modules_headers_begin\n" append asm_src "_boot_modules_headers_begin:\n" append asm_src "\n" # module list set i 0 foreach module $modules { incr i append asm_src "${address_type} _boot_module_${i}_name\n" append asm_src "${address_type} _boot_module_${i}_begin\n" append asm_src "${address_type} _boot_module_${i}_end -" append asm_src " _boot_module_${i}_begin\n" append asm_src "\n" } append asm_src ".global _boot_modules_headers_end\n" append asm_src "_boot_modules_headers_end:\n" append asm_src "\n" # module names set i 0 foreach module $modules { incr i append asm_src ".p2align DATA_ACCESS_ALIGNM_LOG2\n" append asm_src "_boot_module_${i}_name:\n" append asm_src ".string \"${module}\"\n" append asm_src ".byte 0\n" append asm_src "\n" } # header end append asm_src ".section .data.boot_modules_binaries\n" append asm_src "\n" append asm_src ".global _boot_modules_binaries_begin\n" append asm_src "_boot_modules_binaries_begin:\n" append asm_src "\n" # module data set i 0 foreach module $modules { incr i append asm_src ".p2align MIN_PAGE_SIZE_LOG2\n" append asm_src "_boot_module_${i}_begin:\n" append asm_src ".incbin \"${module}\"\n" append asm_src "_boot_module_${i}_end:\n" append asm_src "\n" } append asm_src ".p2align MIN_PAGE_SIZE_LOG2\n" append asm_src ".global _boot_modules_binaries_end\n" append asm_src "_boot_modules_binaries_end:\n" return $asm_src } eval $env(baseSetup) eval $env(testScript)