-
Notifications
You must be signed in to change notification settings - Fork 16
/
errors.asm
1549 lines (1242 loc) · 33.1 KB
/
errors.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
TITLE ERRORS - Copyright (C) SLR Systems 1994
INCLUDE MACROS
INCLUDE SYMBOLS
INCLUDE SEGMENTS
INCLUDE MODULES
INCLUDE GROUPS
INCLUDE IO_STRUC
INCLUDE RESSTRUC
INCLUDE SYMCMACS
public _err_ret
PUBLIC OBJ_PHASE,BAD_RECORD,ERR_SYMBOL_TEXT_ABORT,ERR_TABLE,ERR_INBUF_RET,WARN_SYMBOL_TEXT_RET,ERR_HEX_ABORT
PUBLIC FIXUPP_ERROR,ERR_NFN_ABORT,ERROR_ADR,WARN_ASCIZ_RET,ERR_ASCIZ_RET,ERR_ASCIZ_ABORT,ERR_HEX_RET
PUBLIC ERR_SYMBOL_TEXT_RET,ERR_RET,INDEX_RANGE
PUBLIC WARN_RET,WARN_NFN_RET
PUBLIC ERROR_UNDEFINED,ERR_INBUF_ABORT
.DATA
EXTERNDEF EOUTBUF:BYTE,HEXTBL:BYTE,MODULE_NAME:BYTE,INBUF:BYTE,SYMBOL_TEXT:BYTE,RECORD_TYPE:BYTE
EXTERNDEF IMPEXP_NAM:BYTE,IMPEXP_MOD:BYTE,TEMP_RECORD:BYTE,FIX2_FTYPE:BYTE,ERROR_ASCIZ:BYTE
EXTERNDEF SYMBOL_LENGTH:DWORD,OBJ_DEVICE:DWORD,END_OF_RECORD:DWORD,INPTR1:DWORD,_ERR_COUNT:DWORD
EXTERNDEF WARN_COUNT:DWORD,BUFFER_OFFSET:DWORD,EDI_SAVE:DWORD,RESOURCE_NAME:DWORD,RESOURCE_TYPE:DWORD
EXTERNDEF LDATA_SEGMOD_GINDEX:DWORD,CURNMOD_GINDEX:DWORD,FIX2_TINDEX:DWORD,FIX2_FINDEX:DWORD,FIX2_TT:DWORD
EXTERNDEF FIX2_FF:DWORD,FIX2_OFFSET:DWORD,FIX2_LOC:DWORD,FIX2_SM_BASE_SEG_GINDEX:DWORD
EXTERNDEF CURN_FILE_LIST_GINDEX:DWORD,DOSCALL_EAX:DWORD,LAST_FILNAM:DWORD,CURN_FILENAME:DWORD
EXTERNDEF FIX2_LDATA_LOC:DWORD,FIX2_SM_START:DWORD,RESOURCE_FILE_ADDR:DWORD,FIX2_TOFFSET:DWORD
EXTERNDEF FIX2_FFRAME:DWORD,DEFFILE:DWORD,ERR_NUMBER:DWORD
EXTERNDEF OTHERS_SAVE:DWORD,ERROR_SEM:QWORD,SYMBOL_GARRAY:STD_PTR_S,SEGMENT_GARRAY:STD_PTR_S
EXTERNDEF SEGMOD_GARRAY:STD_PTR_S,GROUP_GARRAY:STD_PTR_S,MODULE_GARRAY:STD_PTR_S
EXTERNDEF TOOL_MESSAGE:TOOL_MESSAGE_STRUCT
EXTERNDEF GINPUT_LINE_NUMBER:DWORD
EXTERNDEF LOUTALL:DWORD
.CODE MIDDLE_TEXT
EXTERNDEF _capture_eax:proc
EXTERNDEF _release_eax:proc
EXTERNDEF _release_eax_bump:proc
EXTERNDEF _err_abort:proc,_abort:proc,OUT5:PROC,MOVE_ASCIZ_ESI_EDI:PROC
EXTERNDEF _move_file_list_gindex_path_prim_ext:proc,CBTA16:PROC,LOUTALL_CON:PROC,HEXWOUT:PROC
EXTERNDEF DO_DOSSEMREQUEST_AX:PROC,_move_path_prim_ext:proc,DO_DOSSEMCLEAR_AX:PROC,FORCE_SIGNON:PROC
EXTERNDEF CAPTURE_EAX:PROC,RELEASE_EAX:PROC,_FLUSH_DISABLE_MAPOUT:PROC,REPORT_MESSAGE:PROC,UNMANGLE:PROC
public _err_inbuf_abort
_err_inbuf_abort PROC
mov EAX,4[ESP]
_err_inbuf_abort ENDP
ERR_INBUF_ABORT PROC
SETT ABORTING
ERR_INBUF_ABORT ENDP
ERR_INBUF_RET PROC
;
;INPTR1 IS POSITION...
;
CALL ERR_INBUF_RET_START
MOV EAX,0A0DH
STOSW
MOV ESI,OFF INBUF+4
MOV ECX,INPTR1
BITT USING_TEMP_RECORD
JZ L3$
MOV ESI,OFF TEMP_RECORD+4
L3$:
SUB ECX,ESI
JZ L2$
MOV AL,' '
CMP ECX,512
JA L2$
L31$:
MOV AL,[ESI]
INC ESI
CMP AL,9
JZ L32$
MOV AL,' '
L32$:
MOV [EDI],AL
INC EDI
DEC ECX
JNZ L31$
L2$:
MOV AL,'^'
STOSB
JMP ERROR_PHASE3
ERR_INBUF_RET ENDP
ERR_INBUF_RET_START PROC NEAR
;
;
;
CALL ERROR_START
MOV EAX,0A0DH
MOV ESI,OFF INBUF+4
STOSW
BITT USING_TEMP_RECORD
JZ L2$
MOV ESI,OFF TEMP_RECORD+4
L2$:
CMP BPTR [ESI],1AH ;SPECIAL EOF HANDLING
JZ L3$
MOV ECX,[ESI-4]
REP MOVSB
RET
L3$:
MOV ESI,OFF EOF_TXT
MOV ECX,SIZEOF EOF_TXT
REP MOVSB
RET
ERR_INBUF_RET_START ENDP
public _error_undefined
_error_undefined proc
mov ECX,4[ESP]
_error_undefined endp
ERROR_UNDEFINED PROC
;
;ECX IS PHYS, EAX IS GINDEX
;
ASSUME ECX:PTR SYMBOL_STRUCT
XOR EAX,EAX
PUSH ECX
XCHG EAX,[ECX]._S_REF_MOD_GINDEX
MOV CURNMOD_GINDEX,EAX
CMP [ECX]._S_LIB_GINDEX,0
MOV AL,LIBRARY_ERR
JNZ EU_0
MOV AL,UNDEFINED_ERR
EU_0:
CALL ERROR_START
POP ECX
CMP BPTR [ECX]._S_NAME_TEXT,'?'
JNZ EU_1
LEA EAX,[ECX]._S_NAME_TEXT
CALL UNMANGLE
MOV ESI,EAX
JMP EU_2
EU_1:
LEA ESI,[ECX]._S_NAME_TEXT
EU_2:
CALL MOVE_ASCIZ_ESI_EDI
JMP ERROR_PHASE3
ERROR_UNDEFINED ENDP
public _warn_nfn_ret
_warn_nfn_ret PROC
mov ECX,8[ESP]
mov AL,4[ESP]
call WARN_NFN_RET
ret
_warn_nfn_ret ENDP
WARN_NFN_RET PROC
;
;
;
PUSH ECX
CALL WARN_START
L1$:
POP ECX
MOV EAX,EDI
push ECX
push EAX
call _move_path_prim_ext
add ESP,8
MOV EDI,EAX
JMP ERROR_PHASE3
ERR_NFN_ABORT::
PUSH ECX
CALL ERROR_ABORT_START
JMP L1$
WARN_NFN_RET ENDP
public _err_nfn_abort
_err_nfn_abort PROC
mov ECX,8[ESP]
mov AL,4[ESP]
call ERR_NFN_ABORT
ret
_err_nfn_abort ENDP
WARN_ASCIZ_RET PROC
;
;
;
PUSH ECX
CALL WARN_START
JMP L1$
ERR_ASCIZ_ABORT LABEL PROC
SETT ABORTING
ERR_ASCIZ_RET LABEL PROC
PUSH ECX
CALL ERROR_START
L1$:
POP ESI
L2$:
MOV AX,' :'
STOSW
MOV EAX,ESI
CALL UNMANGLE
MOV ESI,EAX
CALL MOVE_ASCIZ_ESI_EDI
JMP ERROR_PHASE3 ;PRINT OUTBUF
public _warn_symbol_text_ret
_warn_symbol_text_ret LABEL PROC
mov EAX,4[ESP]
WARN_SYMBOL_TEXT_RET LABEL PROC
CALL WARN_START
JMP L3$
ERR_SYMBOL_TEXT_ABORT LABEL PROC
SETT ABORTING
ERR_SYMBOL_TEXT_RET LABEL PROC
CALL ERROR_START
L3$:
MOV ESI,OFF SYMBOL_TEXT
JMP L2$
WARN_ASCIZ_RET ENDP
ERR_HEX_ABORT PROC
PUSH ECX
CALL ERROR_ABORT_START
POP EAX
CALL HEXWOUT
JMP ERROR_PHASE3
ERR_HEX_ABORT ENDP
ERR_HEX_RET PROC
PUSH ECX
CALL ERROR_START
POP EAX
CALL HEXWOUT
JMP ERROR_PHASE3
ERR_HEX_RET ENDP
_err_ret PROC
jmp near ptr ERR_RET
_err_ret ENDP
ERR_RET PROC
CALL ERROR_START
JMP ERROR_PHASE3
ERR_RET ENDP
_warn_ret proc
mov EAX,4[ESP]
_warn_ret endp
WARN_RET PROC
;
;
;
CALL WARN_START
JMP ERROR_PHASE3 ;PRINT OUTBUF
WARN_RET ENDP
FIXUPP_ERROR PROC
;
;
;
BITT MODEL_CONFLICT
JZ L1$
SETT ABORTING ;ONLY ONE FIXUPP ERROR IF MEMORY MODEL CONFLICT...
L1$:
CALL ERROR_START
CALL FIXUPP_PHASE25
JMP ERROR_PHASE3
FIXUPP_ERROR ENDP
ERROR_PHASE3 PROC
;
;
;
CALL FORCE_SIGNON ;SIGNON BEFORE SPEWING AN ERROR MESSAGE
if fgh_win32dll
MOV EAX,OFF TOOL_MESSAGE
ASSUME EAX:PTR TOOL_MESSAGE_STRUCT
MOV ECX,ERR_NUMBER
MOV BPTR [EDI],0
MOV [EAX]._TMSG_LINENUMBER,K_NOLINENUMBER
MOV [EAX]._TMSG_COLNUMBER,K_NOCOLNUMBER
MOV [EAX]._TMSG_MSGNUMBER,CX
BITT DEF_IN_PROGRESS
JZ L1$
MOV ECX,OFF INBUF+4
BITT USING_TEMP_RECORD
JZ L3$
MOV ECX,OFF TEMP_RECORD+4
L3$:
NEG ECX
ADD ECX,INPTR1
MOV [EAX]._TMSG_COLNUMBER,CX
MOV ECX,GINPUT_LINE_NUMBER
MOV [EAX]._TMSG_LINENUMBER,ECX
L1$:
CALL REPORT_MESSAGE
ASSUME EAX:NOTHING
endif
MOV AX,0A0DH
STOSW
MOV ECX,EDI
MOV EAX,OFF EOUTBUF
SUB ECX,EAX
PUSHM EAX,ECX
CALL LOUTALL_CON ;OUTPUT THIS...
POPM ECX,EAX
CALL LOUTALL
;NOW, RESTORE REGISTERS...
MOV EDI,OFF OTHERS_SAVE
MOV EAX,[EDI]
MOV EBX,[EDI+4]
MOV ECX,[EDI+8]
MOV EDX,[EDI+12]
MOV ESI,[EDI+16]
MOV EDI,EDI_SAVE
BITT ABORTING
if fgh_anythreads
PUSHFD
RELEASE ERROR_SEM
POPFD
endif
JNZ L9$
YIELD
RET
L9$:
JMP _abort
ERROR_PHASE3 ENDP
public _library_error
_library_error proc
mov EAX,4[ESP]
_library_error endp
PUBLIC LIBRARY_ERROR
LIBRARY_ERROR:
LEA ECX,[EAX].SYMBOL_STRUCT._S_NAME_TEXT
MOV AL,LIB1_ERR
CALL ERR_ASCIZ_RET
JMP _abort
OBJ_PHASE PROC
;
;
;
MOV AL,OBJ_PHASE_ERR
MOV BUFFER_OFFSET,ESI
CALL ERR_RET
RET
OBJ_PHASE ENDP
BAD_RECORD PROC
;
;
;
DEC ESI
DEC ESI
MOV AL,BAD_RECORD_ERR
MOV BUFFER_OFFSET,ESI
JMP ERR_RET
BAD_RECORD ENDP
public _index_range
_index_range proc
_index_range endp
INDEX_RANGE PROC
;
;
;
MOV AL,INDEX_RANGE_ERR
MOV BUFFER_OFFSET,ESI
push EAX
call _err_abort
INDEX_RANGE ENDP
ERROR_PHASE1 PROC NEAR
;
;
;
CAPTURE ERROR_SEM ;ERRORS ARE NON-REENTRANT
;
;FIRST, PRESERVE REGISTERS...
;
CLD
MOV EDI_SAVE,EDI
MOV EDI,OFF OTHERS_SAVE
MOV BPTR ERR_NUMBER,AL
MOV [EDI],EAX
MOV [EDI+4],EBX
MOV [EDI+8],ECX
MOV [EDI+12],EDX
MOV [EDI+16],ESI
if fgh_win32dll
XOR EAX,EAX
MOV TOOL_MESSAGE._TMSG_FILENAME,EAX
endif
MOV EAX,CURNMOD_GINDEX
MOV EDI,OFF EOUTBUF
TEST EAX,EAX
JZ P1_RET
CONVERT EAX,EAX,MODULE_GARRAY
MOV ESI,EAX
; Bugzilla 3372: seg fault here with EAX = 0x145
MOV EAX,[EAX].MODULE_STRUCT._M_FILE_LIST_GINDEX
CALL DO_FILE_LIST_GINDEX
MOV BPTR [EDI],'('
INC EDI
LEA ESI,[ESI].MODULE_STRUCT._M_TEXT
CALL MOVE_ASCIZ_ESI_EDI
MOV AX,' )'
STOSW
if fgh_win32dll
CALL UPDATE_TMSG_FILENAME_ASCIZ
endif
EP_4:
;
;IS FILE OFFSET VALID?
;
BITT DURING_OBJ
JZ L4$
;
;PRINT ' Offset xxxxx '
;
MOV ESI,OFF OFFSET_ADR
MOV ECX,SIZEOF OFFSET_ADR
MOV EBX,OBJ_DEVICE
ASSUME EBX:PTR MYI_STRUCT
REP MOVSB
;
;FIND OFFSET TO END OF CURRENT RECORD
;
MOV EAX,[EBX].MYI_PHYS_ADDR ;END OF BUFFER
SUB EAX,[EBX].MYI_COUNT ;MINUS # LEFT
ADD EAX,BUFFER_OFFSET
SUB EAX,END_OF_RECORD
DEC EAX ;EOR POINTED TO CHKSUM BYTE
CALL OUT5
JMP L4$
P1_RET: JMP P1_RET1
L4$:
;
;NOW, IS RECORD TYPE VALID?
;
BITT REC_TYPE_VALID
JZ L5$
MOV ECX,SIZEOF RECTYP_ADR
MOV ESI,OFF RECTYP_ADR
REP MOVSB
MOV EAX,DPTR RECORD_TYPE
CALL HEXWOUT
MOV AL,' '
STOSB
L5$:
MOV AX,0A0DH
STOSW
RET
P1_RET1:
;
;ONLY POSSIBILITY IS TEMP FILENAME
;
MOV EAX,CURN_FILE_LIST_GINDEX
OR EAX,EAX
JZ P2_RET
CALL DO_FILE_LIST_GINDEX
JMP EP_4
P2_RET:
BITT DEF_IN_PROGRESS
JZ P3_RET
MOV ECX,DEFFILE
MOV EAX,OFF EOUTBUF
push ECX
push EAX
call _move_path_prim_ext
add ESP,8
MOV EDI,EAX
if fgh_win32dll
CALL UPDATE_TMSG_FILENAME_ASCIZ
endif
MOV AL,'('
STOSB
MOV EAX,GINPUT_LINE_NUMBER
MOV ECX,EDI
MOV ESI,EAX
CALL CBTA16
MOV EDI,EAX
MOV AL,')'
STOSB
MOV AX,': '
STOSW
RET
P3_RET:
MOV ESI,OFF OPTLINK_TEXT
MOV ECX,SIZEOF OPTLINK_TEXT
REP MOVSB
RET
ERROR_PHASE1 ENDP
DO_FILE_LIST_GINDEX PROC NEAR
;
;
;
TEST EAX,EAX
JZ L9$
MOV ECX,EAX
MOV EAX,OFF EOUTBUF
push ECX
push EAX
call _move_file_list_gindex_path_prim_ext
add ESP,8
MOV EDI,EAX
if fgh_win32dll
CALL UPDATE_TMSG_FILENAME_ASCIZ
endif
L9$:
RET
DO_FILE_LIST_GINDEX ENDP
if fgh_win32dll
UPDATE_TMSG_FILENAME_ASCIZ PROC NEAR
;
;MOVE TO ASCIZ ALSO...
;
PUSHM EDI,ESI
MOV ECX,EDI
MOV EDI,OFF ERROR_ASCIZ
MOV ESI,OFF EOUTBUF
MOV TOOL_MESSAGE._TMSG_FILENAME,EDI
SUB ECX,ESI
MOV EAX,020H
CMP ECX,254
JA L5$
REP MOVSB
L5$:
STOSW
POPM ESI,EDI
RET
UPDATE_TMSG_FILENAME_ASCIZ ENDP
endif
WARN_START PROC NEAR
;
;
;
CALL ERROR_PHASE1 ;DO PRELIMINARY THINGS
if fgh_win32dll
MOV TOOL_MESSAGE._TMSG_MSGTYPE,EMSG_WARNING
endif
INC WARN_COUNT
MOV ESI,OFF WARN_ADR
MOV ECX,SIZEOF WARN_ADR
JMP ER_P2_1
WARN_START ENDP
ERROR_ABORT_START::
SETT ABORTING ;SO PHASE 3 KNOWS...
ERROR_START PROC NEAR
;
;
;
CALL ERROR_PHASE1 ;DO PRELIMINARY THINGS
ERROR_PHASE2 LABEL NEAR
;
if fgh_win32dll
MOV TOOL_MESSAGE._TMSG_MSGTYPE,EMSG_ERROR
endif
INC _ERR_COUNT
;
;NOW OUTPUT ERROR # IN DECIMAL
;
MOV ESI,OFF ERROR_ADR
MOV ECX,SIZEOF ERROR_ADR
ER_P2_1::
REP MOVSB
MOV EAX,ERR_NUMBER
MOV ECX,EDI
MOV ESI,EAX
CALL CBTA16
MOV EDI,EAX
MOV AX,' :'
STOSW
;
;NOW OUTPUT ERROR MESSAGE TEXT
;
if fgh_win32dll
MOV TOOL_MESSAGE._TMSG_MSGTEXT,EDI
endif
MOV ESI,ERR_TABLE[ESI*4]
XOR ECX,ECX
MOV CL,[ESI]
INC ESI
REP MOVSB
MOV AL,' '
STOSB
if fgh_dosx
CMP ERR_NUMBER,_DOS_ERR
JNZ L9$
MOV EAX,DOSCALL_EAX
CALL HEXWOUT
MOV AL,' '
STOSB
endif
L9$:
RET
ERROR_START ENDP
FIXUPP_PHASE25 PROC NEAR
;
;GIVE WHAT INFO YOU CAN ABOUT FIXUPP PROBLEM....
;FIRST GIVE OFFSET FROM CURRENT SEGMOD...
;
BITT FINAL_FIXUPPS
JZ L9$
MOV ECX,SIZEOF ATRELATIVE_ADR
MOV ESI,OFF ATRELATIVE_ADR
REP MOVSB
;
;PRINT RELATIVE OFFSET
;
MOV EAX,FIX2_LDATA_LOC
SUB EAX,FIX2_SM_START
ADD EAX,FIX2_OFFSET
CALL OUT5
MOV ECX,SIZEOF FROMSEG_ADR
MOV ESI,OFF FROMSEG_ADR
REP MOVSB
MOV EAX,FIX2_SM_BASE_SEG_GINDEX
CONVERT EAX,EAX,SEGMENT_GARRAY
LEA ESI,[EAX].SEGMENT_STRUCT._SEG_TEXT
CALL MOVE_ASCIZ_ESI_EDI
MOV AX,0A0DH
STOSW
;
;NOW OUTPUT FRAME
;
CALL FRAME_OUTPUT
;
;AND TARGET
;
CALL TARGET_OUTPUT
;
;AND FINALLY FIXUPP_TYPE
;
CALL FIXUPP_TYPE_OUTPUT
;
;THANK-YOU
L9$:
RET
FIXUPP_PHASE25 ENDP
FRAME_OUTPUT PROC NEAR
;
;
;
MOV ESI,OFF FRAME_ADR
MOV ECX,SIZEOF FRAME_ADR
MOV EDX,FIX2_FF
MOV EAX,FIX2_FINDEX
REP MOVSB
CALL F1TABLE[EDX*4] ;SYMBOL, SEGMENT, OR GROUP NAME
;
;NOW FRAME VALUE...
;
MOV AL,' '
STOSB
MOV EAX,FIX2_FFRAME ;THIS IS OS2 NUMBER IF PROT-MODE
if fg_prot
BITT OUTPUT_SEGMENTED
JNZ L1$
endif
SHR EAX,4
CALL OUT5
L2$:
MOV AX,0A0DH
STOSW
RET
if fg_prot
L1$:
CALL HEXWOUT
JMP L2$
endif
CASE_SEGMENT::
MOV ESI,OFF SEGMENT_ADR
MOV ECX,SIZEOF SEGMENT_ADR
REP MOVSB
SEGMENT_1:
CONVERT EAX,EAX,SEGMENT_GARRAY
LEA ESI,[EAX].SEGMENT_STRUCT._SEG_TEXT
CALL MOVE_ASCIZ_ESI_EDI
RET
CASE_SEGMOD::
;
;AX IS SEGMENT
;
MOV ESI,OFF SEGMENT_ADR
MOV ECX,SIZEOF SEGMENT_ADR
REP MOVSB
CONVERT EAX,EAX,SEGMOD_GARRAY
MOV EAX,[EAX].SEGMOD_STRUCT._SM_BASE_SEG_GINDEX
JMP SEGMENT_1
CASE_ABSOLUTE::
RET
CASE_GROUP::
MOV ESI,OFF GROUP_ADR
MOV ECX,SIZEOF GROUP_ADR
REP MOVSB
CONVERT EAX,EAX,GROUP_GARRAY
LEA ESI,[EAX].GROUP_STRUCT._G_TEXT
CALL MOVE_ASCIZ_ESI_EDI
RET
CASE_EXTERNAL::
MOV ESI,OFF EXTERNAL_ADR
MOV ECX,SIZEOF EXTERNAL_ADR
REP MOVSB
CONVERT EAX,EAX,SYMBOL_GARRAY
LEA EAX,[EAX].SYMBOL_STRUCT._S_NAME_TEXT
CALL UNMANGLE
MOV ESI,EAX
CALL MOVE_ASCIZ_ESI_EDI
RET
CASE_LOC::
MOV ESI,OFF LOC_ADR
MOV ECX,SIZEOF LOC_ADR
REP MOVSB
RET
CASE_TARG::
MOV ESI,OFF TARG_ADR
MOV ECX,SIZEOF TARG_ADR
REP MOVSB
RET
FRAME_OUTPUT ENDP
TARGET_OUTPUT PROC NEAR
;
;
;
MOV ESI,OFF TARGET_ADR
MOV EDX,FIX2_TT
MOV ECX,SIZEOF TARGET_ADR
AND EDX,03H
REP MOVSB
MOV EAX,FIX2_TINDEX
CALL F2TABLE[EDX*4] ;SYMBOL, SEGMENT, OR GROUP NAME
;
;NOW TARGET VALUE...
;
MOV AL,' '
STOSB
MOV EAX,FIX2_TOFFSET
CALL OUT5
MOV AX,0A0DH
STOSW
RET
TARGET_OUTPUT ENDP
FIXUPP_TYPE_OUTPUT PROC NEAR
;
;
;
MOV ESI,OFF FIX_TYPE_ADR
MOV ECX,SIZEOF FIX_TYPE_ADR
MOV EBX,FIX2_LOC
REP MOVSB
MOV ESI,LOCTABLE[EBX*4]
XOR ECX,ECX
LODSB
MOV CL,AL
REP MOVSB
RET
FIXUPP_TYPE_OUTPUT ENDP
.CONST
ALIGN 4
F1TABLE LABEL DWORD
DD CASE_SEGMENT ;0
DD CASE_GROUP ;1
DD CASE_EXTERNAL ;2
DD CASE_ABSOLUTE ;3
DD CASE_LOC ;4
DD CASE_TARG ;5
F2TABLE LABEL DWORD
DD CASE_SEGMOD ;0
DD CASE_GROUP ;1
DD CASE_EXTERNAL ;2
DD CASE_ABSOLUTE ;3
LOCTABLE LABEL DWORD
DD SHORT_JMP ;0
DD NORMAL_JMP ;1
REPT 6
DD UNDEF_JMP
ENDM
;32-BIT RELOCATABLES...
DD UNDEF_JMP
DD NORMAL_32_JMP ;9
REPT 6
DD UNDEF_JMP
ENDM
;16-BIT SEGMENT-RELATIVES
DD LOBYTE_ADR1
DD OFFSET_ADR1
DD BASE_ADR1
DD PTR_ADR1
DD HIBYTE_ADR1
DD WOFFSET_ADR1
REPT 2
DD UNDEF_JMP
ENDM
;32-BIT NORMALS
DD UNDEF_JMP
DD DWORD_ADR1
DD UNDEF_JMP
DD FWORD_PTR_ADR1
DD UNDEF_JMP
DD WDWORD_ADR1
DD 2 DUP(UNDEF_JMP)
if fg_japan
INCLUDE JAPAN.INC
else
SHORT_JMP DB SIZEOF SHORT_JMP-1,'Short JMP'
NORMAL_JMP DB SIZEOF NORMAL_JMP-1,'Near JMP or CALL'
UNDEF_JMP DB SIZEOF UNDEF_JMP-1,'Unknown Type'
NORMAL_32_JMP DB SIZEOF NORMAL_32_JMP-1,'32-bit Conditional JMP'
LOBYTE_ADR1 DB SIZEOF LOBYTE_ADR1-1,'LoByte (single byte)'
OFFSET_ADR1 DB SIZEOF OFFSET_ADR1-1,'16-bit Offset'
WOFFSET_ADR1 DB SIZEOF WOFFSET_ADR1-1,'16-bit Weird Offset'
BASE_ADR1 DB SIZEOF BASE_ADR1-1,'Segment Base'
PTR_ADR1 DB SIZEOF PTR_ADR1-1,'DWORD seg:offs'