|
@@ -36,10 +36,24 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
|
36
|
36
|
|
37
|
37
|
/* Allow for DBG()-style messages within libprefix */
|
38
|
38
|
#ifdef NDEBUG
|
39
|
|
- .macro progress message
|
|
39
|
+ .macro progress message, regs:vararg
|
40
|
40
|
.endm
|
41
|
41
|
#else
|
42
|
|
- .macro progress message
|
|
42
|
+ .macro dumpreg reg, others:vararg
|
|
43
|
+ pushl %eax
|
|
44
|
+ movl \reg, %eax
|
|
45
|
+ pushw %di
|
|
46
|
+ xorw %di, %di
|
|
47
|
+ call print_space
|
|
48
|
+ call print_hex_dword
|
|
49
|
+ popw %di
|
|
50
|
+ popl %eax
|
|
51
|
+ .ifnb \others
|
|
52
|
+ dumpreg \others
|
|
53
|
+ .endif
|
|
54
|
+ .endm
|
|
55
|
+
|
|
56
|
+ .macro progress message, regs:vararg
|
43
|
57
|
pushfl
|
44
|
58
|
pushw %ds
|
45
|
59
|
pushw %si
|
|
@@ -51,6 +65,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
|
51
|
65
|
call print_message
|
52
|
66
|
popw %di
|
53
|
67
|
popw %si
|
|
68
|
+ .ifnb \regs
|
|
69
|
+ dumpreg \regs
|
|
70
|
+ .endif
|
|
71
|
+ pushw %di
|
|
72
|
+ pushw %ax
|
|
73
|
+ xorw %di, %di
|
|
74
|
+ movb $( '\n' ), %al
|
|
75
|
+ call print_character
|
|
76
|
+ popw %ax
|
|
77
|
+ popw %di
|
54
|
78
|
popw %ds
|
55
|
79
|
popfl
|
56
|
80
|
.section ".prefix.data", "aw", @progbits
|
|
@@ -659,7 +683,7 @@ hooked_bios_interrupts:
|
659
|
683
|
.code16
|
660
|
684
|
.globl install
|
661
|
685
|
install:
|
662
|
|
- progress "install:\n"
|
|
686
|
+ progress "\ninstall:"
|
663
|
687
|
/* Preserve registers */
|
664
|
688
|
pushl %esi
|
665
|
689
|
pushl %edi
|
|
@@ -702,7 +726,7 @@ install:
|
702
|
726
|
.code16
|
703
|
727
|
.globl install_prealloc
|
704
|
728
|
install_prealloc:
|
705
|
|
- progress "install_prealloc:\n"
|
|
729
|
+ progress "\ninstall_prealloc:", %eax, %ebx, %esi, %edi, %ebp
|
706
|
730
|
/* Save registers on external stack */
|
707
|
731
|
pushal
|
708
|
732
|
pushw %ds
|
|
@@ -726,7 +750,6 @@ install_prealloc:
|
726
|
750
|
pushl %edi
|
727
|
751
|
|
728
|
752
|
/* Install .text16.early and calculate %ecx as offset to next block */
|
729
|
|
- progress " .text16.early\n"
|
730
|
753
|
pushl %esi
|
731
|
754
|
xorl %esi, %esi
|
732
|
755
|
movw %cs, %si
|
|
@@ -737,6 +760,7 @@ install_prealloc:
|
737
|
760
|
shll $4, %edi
|
738
|
761
|
movl $_text16_early_filesz, %ecx
|
739
|
762
|
movl $_text16_early_memsz, %edx
|
|
763
|
+ progress " .text16.early ", %esi, %edi, %ecx, %edx
|
740
|
764
|
call install_block /* .text16.early */
|
741
|
765
|
jc install_block_death
|
742
|
766
|
popl %ecx /* Calculate offset to next block */
|
|
@@ -750,7 +774,7 @@ install_prealloc:
|
750
|
774
|
* already have 4GB segment limits as a result of calling
|
751
|
775
|
* install_block.)
|
752
|
776
|
*/
|
753
|
|
- progress " access_highmem\n"
|
|
777
|
+ progress " access_highmem"
|
754
|
778
|
pushw %cs
|
755
|
779
|
pushw $1f
|
756
|
780
|
pushw %ax
|
|
@@ -762,7 +786,7 @@ install_prealloc:
|
762
|
786
|
#endif
|
763
|
787
|
|
764
|
788
|
/* Open payload (which may not yet be in memory) */
|
765
|
|
- progress " open_payload\n"
|
|
789
|
+ progress " open_payload ", %esi, %ecx
|
766
|
790
|
pushw %cs
|
767
|
791
|
pushw $1f
|
768
|
792
|
pushw %ax
|
|
@@ -779,16 +803,16 @@ install_prealloc:
|
779
|
803
|
1: addl %ecx, %esi
|
780
|
804
|
|
781
|
805
|
/* Install .text16.late and .data16 */
|
782
|
|
- progress " .text16.late\n"
|
783
|
806
|
movl $_text16_late_filesz, %ecx
|
784
|
807
|
movl $_text16_late_memsz, %edx
|
|
808
|
+ progress " .text16.late ", %esi, %edi, %ecx, %edx
|
785
|
809
|
call install_block /* .text16.late */
|
786
|
810
|
jc install_block_death
|
787
|
|
- progress " .data16\n"
|
788
|
811
|
movzwl %bx, %edi
|
789
|
812
|
shll $4, %edi
|
790
|
813
|
movl $_data16_filesz, %ecx
|
791
|
814
|
movl $_data16_filesz, %edx /* do not zero our temporary stack */
|
|
815
|
+ progress " .data16 ", %esi, %edi, %ecx, %edx
|
792
|
816
|
call install_block /* .data16 */
|
793
|
817
|
jc install_block_death
|
794
|
818
|
|
|
@@ -825,10 +849,10 @@ install_prealloc:
|
825
|
849
|
* prior to reading the E820 memory map and relocating
|
826
|
850
|
* properly.
|
827
|
851
|
*/
|
828
|
|
- progress " .textdata\n"
|
829
|
852
|
pushl %edi
|
830
|
853
|
movl $_textdata_filesz, %ecx
|
831
|
854
|
movl $_textdata_memsz, %edx
|
|
855
|
+ progress " .textdata ", %esi, %edi, %ecx, %edx
|
832
|
856
|
call install_block
|
833
|
857
|
jc install_block_death
|
834
|
858
|
popl %edi
|
|
@@ -850,7 +874,7 @@ install_prealloc:
|
850
|
874
|
#ifndef KEEP_IT_REAL
|
851
|
875
|
|
852
|
876
|
/* Initialise librm at current location */
|
853
|
|
- progress " init_librm\n"
|
|
877
|
+ progress " init_librm ", %eax, %ebx, %edi
|
854
|
878
|
movw %ax, (init_librm_vector+2)
|
855
|
879
|
lcall *init_librm_vector
|
856
|
880
|
|
|
@@ -881,7 +905,7 @@ install_prealloc:
|
881
|
905
|
.section ".prefix.install_prealloc", "awx", @progbits
|
882
|
906
|
1:
|
883
|
907
|
/* Copy code to new location */
|
884
|
|
- progress " copy\n"
|
|
908
|
+ progress " copy ", %esi, %edi, %ecx
|
885
|
909
|
pushl %edi
|
886
|
910
|
pushw %bx
|
887
|
911
|
movw $copy_bytes, %bx
|
|
@@ -890,7 +914,7 @@ install_prealloc:
|
890
|
914
|
popl %edi
|
891
|
915
|
|
892
|
916
|
/* Initialise librm at new location */
|
893
|
|
- progress " init_librm\n"
|
|
917
|
+ progress " init_librm ", %eax, %ebx, %edi
|
894
|
918
|
lcall *init_librm_vector
|
895
|
919
|
|
896
|
920
|
#else /* KEEP_IT_REAL */
|
|
@@ -902,7 +926,7 @@ install_prealloc:
|
902
|
926
|
#endif /* KEEP_IT_REAL */
|
903
|
927
|
|
904
|
928
|
/* Close access to payload */
|
905
|
|
- progress " close_payload\n"
|
|
929
|
+ progress " close_payload"
|
906
|
930
|
movw %ax, (close_payload_vector+2)
|
907
|
931
|
lcall *close_payload_vector
|
908
|
932
|
|