hw: Use properly sized asm type in boot_modules.s

The boot modules assembled by the generated boot_modules.s file is
accessed from core using struct Bm_header. Unfortunately the assembler
.long directive is synonym to .int [1] and thus has the same size as the
C++ int type and *not* long. Use the matching assembly type .quad in
boot_modules.s when generating the file for 64-bit platforms such as
x86_64.

[1] - https://sourceware.org/binutils/docs/as/Long.html
This commit is contained in:
Adrian-Ken Rueegsegger 2015-03-12 10:27:40 +01:00 committed by Christian Helmuth
parent 3ad0f06b06
commit 8c9b79fab0
1 changed files with 10 additions and 4 deletions

View File

@ -52,6 +52,12 @@ proc run_boot_dir {binaries {core_type core}} {
#
set boot_modules "[run_dir]/boot_modules.s"
if {[have_spec "64bit"]} {
set address_type ".quad"
} else {
set address_type ".long"
}
# introduce boot module headers
exec echo -e \
"/**" \
@ -73,10 +79,10 @@ proc run_boot_dir {binaries {core_type core}} {
foreach binary $binaries {
if {$binary == $core_bin} { continue }
exec echo -e \
"\n.long _boot_module_${i}_name" \
"\n.long _boot_module_${i}_begin" \
"\n.long _boot_module_${i}_end - _boot_module_${i}_begin" \
>> $boot_modules
"\n${address_type} _boot_module_${i}_name" \
"\n${address_type} _boot_module_${i}_begin" \
"\n${address_type} _boot_module_${i}_end -" \
" _boot_module_${i}_begin" >> $boot_modules
incr i
}