* grub-core/boot/mips/startup_raw.S: Handle the case of gap between
.data and .bss. May happen if compiler and assembly use different alignment.
This commit is contained in:
parent
a0e1befb57
commit
054efe541f
2 changed files with 18 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/boot/mips/startup_raw.S: Handle the case of gap between
|
||||||
|
.data and .bss. May happen if compiler and assembly use different
|
||||||
|
alignment.
|
||||||
|
|
||||||
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
On MIPS handle got16 relocations to local symbols in an ABI-compliant
|
On MIPS handle got16 relocations to local symbols in an ABI-compliant
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
.extern __bss_start
|
.extern __bss_start
|
||||||
.extern _end
|
.extern _end
|
||||||
|
.extern _edata
|
||||||
|
|
||||||
.globl __start, _start, start
|
.globl __start, _start, start
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
@ -248,8 +249,9 @@ cmdlinedone:
|
||||||
#include "../../kern/mips/cache_flush.S"
|
#include "../../kern/mips/cache_flush.S"
|
||||||
|
|
||||||
/* Decompress the payload. */
|
/* Decompress the payload. */
|
||||||
lui $a0, %hi(__bss_start)
|
lui $a0, %hi(_edata)
|
||||||
addiu $a0, $a0, %lo(__bss_start)
|
addiu $a0, $a0, %lo(_edata)
|
||||||
|
|
||||||
lui $t0, %hi(base)
|
lui $t0, %hi(base)
|
||||||
addiu $t0, $t0, %lo(base)
|
addiu $t0, $t0, %lo(base)
|
||||||
subu $a0, $a0, $t0
|
subu $a0, $a0, $t0
|
||||||
|
@ -287,3 +289,11 @@ cmdlinedone:
|
||||||
|
|
||||||
jr $t1
|
jr $t1
|
||||||
nop
|
nop
|
||||||
|
/* Ensure that .data section is created. In code we suppose that _edata
|
||||||
|
is first location not in decompressor image. Strictly speaking it's
|
||||||
|
_edata only when .data is present and _etext otherwise. But checking
|
||||||
|
for .data presence would cost more in code than it is to ensure that
|
||||||
|
.data is created.
|
||||||
|
*/
|
||||||
|
.data
|
||||||
|
.long 0
|
||||||
|
|
Loading…
Reference in a new issue