| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Add FILE_LICENCE declarations to almost all files that make up the
various standard builds of gPXE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Try to avoid future problems caused by implicit section flags and/or
type information by instituting a policy that all .section
declarations must explicitly state the flags and type.
Most of this change was achieved using
perl -pi \
-e 's/".text"$/".text", "ax", \@progbits/ ; ' \
-e 's/".text16"$/".text16", "ax", \@progbits/ ; ' \
-e 's/".text16.null"$/".text16.null", "ax", \@progbits/ ; ' \
-e 's/".text16.data"$/".text16.data", "aw", \@progbits/ ; ' \
-e 's/".data"$/".data", "aw", \@progbits/ ; ' \
-e 's/".data16"$/".data16", "aw", \@progbits/ ; ' \
-e 's/".bss"$/".bss", "aw", \@nobits/ ; ' \
-e 's/".bss16"$/".bss16", "aw", \@nobits/ ; ' \
-e 's/".prefix"$/".prefix", "ax", \@progbits/ ; ' \
-e 's/".prefix.lib"$/".prefix.lib", "awx", \@progbits/ ; ' \
-e 's/".prefix.data"$/".prefix.data", "aw", \@progbits/ ; ' \
-e 's/".weak"$/".weak", "a", \@nobits/ ; ' \
`git grep -l '\.section'`
|
|
|
|
|
|
|
|
|
|
|
|
| |
With a 16-bit operand, lgdt/lidt will load only a 24-bit base address,
ignoring the high-order bits. This meant that we could fail to fully
restore the GDT across a call into gPXE, if the GDT happened to be
located above the 16MB mark.
Not all of our lgdt/lidt instructions require a data32 prefix (for
example, reloading the real-mode IDT can never require a 32-bit base
address), but by adding them everywhere we will hopefully not forget
the necessary ones in future.
|
| |
|
|
|
|
| |
See http://etherboot.org/wiki/dev/gdbstub for documentation.
|
| |
|
|
|
|
| |
confusing to read the code.
|
|
|
|
| |
stack; it breaks vmxassist.
|
|
|
|
| |
outside of librm.S.
|
| |
|
|
|
|
|
|
| |
real_call(), rather than moving it to the RM stack and back again.
This allows the real-mode function to completely destroy the stack
contents, provided that it manages to return to real_call().
|
|
|
|
| |
call.
|
| |
|
| |
|
|
|
|
| |
worrying about its stack being destroyed during the Etherboot run.
|
|
|
|
|
| |
install() now calls relocate(), moves the protected-mode code to the new
location, and calls hide_etherboot().
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Use .text16.data section with "aw" attributes, to avoid section type
conflicts when placing both code and data into .text16.
Add __from_{text16,data16}.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
between the low half stored in the static variable rm_sp, and the high
half stored on the prot_call() stack, because:
Just using the stack would screw up when a prot_call()ed routine
executes a real_call(); it would have no way to find the current top of
the RM stack.
Extending rm_sp to rm_esp would not be safe, because the guarantee that
rm_sp must return to the correct value by the time an external
real-mode call returns applies only to %sp, not to %esp.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
from protected-mode code.
Set up %ds to point to .data16 in prot_to_real, so that code specified
via REAL_EXEC() and friends can access variables in .data16.
Move most real-mode librm variables from .text16 to .data16.
|
|
|
|
|
| |
install_prealloc. I *think* these will suffice for all the 16-bit
prefixes.
|
|
|
|
|
| |
advantage of the fact that we have to have a permanently-resident block
in base memory.
|
|
|
|
|
| |
Doing so, in fact, seems to expose an assembler bug; (a-b-0) is
apparently not the same as (a-b). Go figure.
|
| |
|
|
|
|
| |
of librm.
|
|
|
|
| |
always saves 32 bits).
|
| |
|
|
|
|
| |
registers returned to RM code.
|
|
|