Michael Brown
6abfaa153b
Towards making KEEP_IT_REAL work again.
Fix bug that caused over-allocation of .text16 and .data16 memory areas
by a factor of 16.
hace 18 años
Michael Brown
35b04b1514
Tidy up comment
hace 18 años
Michael Brown
041a04335e
Fixed assembly on old versions of gas
hace 18 años
Michael Brown
29340d7728
Documented the fact that the prefix can prot_call(main) without
worrying about its stack being destroyed during the Etherboot run.
hace 18 años
Michael Brown
89da833c5d
init_librm() and prot_call() are now real-mode far calls.
install() now calls relocate(), moves the protected-mode code to the new
location, and calls hide_etherboot().
hace 18 años
Michael Brown
02cf755f3f
Removed REAL_EXEC(); there is no longer any code using it.
hace 18 años
Michael Brown
83d80d9e79
Remove references to obsoleted REAL_CALL from documentation.
hace 18 años
Michael Brown
5080668704
Provide access to rm_cs and rm_ds from protected-mode code.
hace 18 años
Michael Brown
f7b963da51
(Redoing check-in lost by SourceForge's failure.)
Use .text16.data section with "aw" attributes, to avoid section type
conflicts when placing both code and data into .text16.
Add __from_{text16,data16}.
hace 18 años
Michael Brown
fdb983d473
Preserve the whole of %esp across prot_call(). We have to split this
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.
hace 18 años
Michael Brown
c10d1aa9d7
Preserve GDT across prot_call().
hace 18 años
Michael Brown
dcc1b0054e
This line should not have been checked in
hace 18 años
Michael Brown
832807726a
Add infrastructure to support access to .data16 (and .text16) variables
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.
hace 18 años
Michael Brown
10c28a51bd
Create two easy-to-use entry points in libprefix: install and
install_prealloc. I *think* these will suffice for all the 16-bit
prefixes.
hace 18 años
Michael Brown
9fcded3d23
Towards a(nother) new real-mode infrastructure, in which we take
advantage of the fact that we have to have a permanently-resident block
in base memory.
hace 18 años
Michael Brown
352bf1bda2
Move init.h to gpxe/init.h.
hace 18 años
Michael Brown
4c4e4de18f
(librm_base-1b) is already an offset; no need to apply OFFSET().
Doing so, in fact, seems to expose an assembler bug; (a-b-0) is
apparently not the same as (a-b). Go figure.
hace 18 años
Michael Brown
d3dec7c331
Update to cope with changes in registers.h
hace 19 años
Michael Brown
378c1b500c
Cleaner separation of functionality between post_reloc and
initialise_via_librm.
hace 19 años
Michael Brown
34a0b5f16f
initialise() doesn't take regs
hace 19 años
Michael Brown
87508aa0b2
arch_initialise() is now sufficiently generic that we may as well just
call it initialise() and place it in main.c. :)
hace 19 años
Michael Brown
560027899e
Heading towards a sane set of control functions
hace 19 años
Michael Brown
04a99841e6
Make prot_call() able to transparently return via the newly installed copy
of librm.
hace 19 años
Michael Brown
2fa14f2f1d
lgdt needs data32 prefix, otherwise it loads only 24 bits. (sgdt
always saves 32 bits).
hace 19 años
Michael Brown
6a4ac358f3
Add INIT_FNs to make sure that librm gets reallocated when needed.
hace 19 años
Michael Brown
1f6dfd7047
Allow ourselves to be freed by basemem.c without being damaged.
hace 19 años
Michael Brown
a800e9657d
PM function called by prot_call() should be allowed to modifying
registers returned to RM code.
hace 19 años
Michael Brown
0ff80b477d
Merged mcb30-realmode-redesign back to HEAD
hace 19 años