Daniel Verkamp
aa28544373
[librm] Add rm stack copying functions
16 anni fa
Daniel Verkamp
2539f5fa4a
[librm] Make rm_sp and rm_ss globals again
16 anni fa
Stefan Hajnoczi
04bc50f025
[GDB] Add GDB stub for remote debugging
See http://etherboot.org/wiki/dev/gdbstub for documentation.
16 anni fa
Michael Brown
1949641d10
Fix compiler warnings that appear only on OpenBSD.
17 anni fa
Michael Brown
881dd8e102
Switch rm_ss and rm_sp back to being words; it'll make it less
confusing to read the code.
17 anni fa
Michael Brown
42d96bcb07
Don't use the "rep ss movsb" trick to copy the RM stack to the PM
stack; it breaks vmxassist.
17 anni fa
Michael Brown
0ed066bc50
rm_ss, rm_sp, and pm_esp don't need to be accessed from anywhere
outside of librm.S.
17 anni fa
Michael Brown
013d381e3c
Real-mode code might set the direction flag, which would cause carnage.
17 anni fa
Michael Brown
a9369bb503
Leave protected-mode return address on PM stack when issuing a
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().
18 anni fa
Michael Brown
290c5ee779
Don't automatically call gateA20_set() when returning from a real-mode
call.
18 anni fa
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.
18 anni fa
Michael Brown
35b04b1514
Tidy up comment
18 anni fa
Michael Brown
041a04335e
Fixed assembly on old versions of gas
18 anni fa
Michael Brown
29340d7728
Documented the fact that the prefix can prot_call(main) without
worrying about its stack being destroyed during the Etherboot run.
18 anni fa
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().
18 anni fa
Michael Brown
02cf755f3f
Removed REAL_EXEC(); there is no longer any code using it.
18 anni fa
Michael Brown
83d80d9e79
Remove references to obsoleted REAL_CALL from documentation.
18 anni fa
Michael Brown
5080668704
Provide access to rm_cs and rm_ds from protected-mode code.
18 anni fa
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}.
18 anni fa
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.
18 anni fa
Michael Brown
c10d1aa9d7
Preserve GDT across prot_call().
18 anni fa
Michael Brown
dcc1b0054e
This line should not have been checked in
18 anni fa
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.
18 anni fa
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.
18 anni fa
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.
18 anni fa
Michael Brown
352bf1bda2
Move init.h to gpxe/init.h.
18 anni fa
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.
18 anni fa
Michael Brown
d3dec7c331
Update to cope with changes in registers.h
19 anni fa
Michael Brown
378c1b500c
Cleaner separation of functionality between post_reloc and
initialise_via_librm.
19 anni fa
Michael Brown
34a0b5f16f
initialise() doesn't take regs
19 anni fa
Michael Brown
87508aa0b2
arch_initialise() is now sufficiently generic that we may as well just
call it initialise() and place it in main.c. :)
19 anni fa
Michael Brown
560027899e
Heading towards a sane set of control functions
19 anni fa
Michael Brown
04a99841e6
Make prot_call() able to transparently return via the newly installed copy
of librm.
19 anni fa
Michael Brown
2fa14f2f1d
lgdt needs data32 prefix, otherwise it loads only 24 bits. (sgdt
always saves 32 bits).
19 anni fa
Michael Brown
6a4ac358f3
Add INIT_FNs to make sure that librm gets reallocated when needed.
19 anni fa
Michael Brown
1f6dfd7047
Allow ourselves to be freed by basemem.c without being damaged.
19 anni fa
Michael Brown
a800e9657d
PM function called by prot_call() should be allowed to modifying
registers returned to RM code.
19 anni fa
Michael Brown
0ff80b477d
Merged mcb30-realmode-redesign back to HEAD
19 anni fa