22// 自動解析モジュール
33// Copyright (C) 1989,1990 K.Abe, 1994 R.ShimiZu
44// All rights reserved.
5- // Copyright (C) 1997-2023 TcbnErik
5+ // Copyright (C) 2025 TcbnErik
66
77#include <stdio.h>
88#include <string.h>
@@ -152,7 +152,7 @@ static void printUndefinedInstruction(address pc) {
152152// プログラム領域の終端をラベル登録する
153153static void foundProgramEnd (address adrs ) {
154154 if (search_label (adrs ) == NULL ) {
155- regist_label (adrs , DATLABEL | UNKNOWN );
155+ regist_label (adrs , DATLABEL | ( lblmode ) UNKNOWN );
156156 }
157157}
158158
@@ -347,7 +347,7 @@ static boolean analyzeInner(address start, analyze_mode mode) {
347347 disasm * code = & disp .code ;
348348 CodeFlow flow ;
349349 int orib = 0 ; // ori.b #??,d0 = $0000????
350- void (* regoplbl )(disasm * code ) = Dis .actions -> registerOperandLabel ;
350+ void (* regoplbl )(disasm * code ) = Dis .actions -> registerOperandLabel ;
351351
352352 if (Dis .availableTextEnd <= start ) {
353353 printReason ("PCが有効なセクションを外れた。" , start );
@@ -515,7 +515,7 @@ boolean analyze(address start, analyze_mode mode) {
515515
516516 if (!success ) {
517517 charout ('?' );
518- ch_lblmod (start , DATLABEL | UNKNOWN | FORCE );
518+ ch_lblmod (start , DATLABEL | FORCE | ( lblmode ) UNKNOWN );
519519 return FALSE;
520520 }
521521 charout ('<' );
@@ -533,12 +533,12 @@ static boolean branchToOdd(DisParam* disp, address start, address limit) {
533533
534534 if (Dis .acceptAddressError ) {
535535 // -j: 奇数アドレスへの分岐を未定義命令と「しない」
536- regist_label (code -> jmp , DATLABEL | UNKNOWN );
536+ regist_label (code -> jmp , DATLABEL | ( lblmode ) UNKNOWN );
537537 return TRUE;
538538 }
539539
540540 // 奇数アドレスへの分岐があればプログラム領域ではない
541- ch_lblmod (start , DATLABEL | UNKNOWN | FORCE );
541+ ch_lblmod (start , DATLABEL | FORCE | ( lblmode ) UNKNOWN );
542542 not_program (start , MIN (code -> pc , limit ));
543543 return FALSE;
544544}
@@ -561,7 +561,7 @@ static boolean branch_job(DisParam* disp, address start, analyze_mode mode,
561561 // 分岐先の領域を解析する
562562 if (!analyze (opval , mode ) && mode != ANALYZE_IGNOREFAULT && !Dis .i ) {
563563 // 分岐先がプログラム領域でなければ、呼び出し元も同じ
564- ch_lblmod (start , DATLABEL | UNKNOWN | FORCE );
564+ ch_lblmod (start , DATLABEL | FORCE | ( lblmode ) UNKNOWN );
565565 not_program (start , MIN (disp -> pc , limit ));
566566 return FALSE;
567567 }
@@ -628,7 +628,7 @@ static boolean analyzeJump(DisParam* disp, CodeFlow* flow, address start,
628628 // 実際の分岐先は実行時のインデックスレジスタの値次第で、ラベルの場所が
629629 // プログラムではない可能性もあるので、解析はせずラベル登録だけに留める。
630630 // (README.txtの「参照されないラベル」と同様のケース)
631- regist_label (code -> jmp , DATLABEL | UNKNOWN );
631+ regist_label (code -> jmp , DATLABEL | ( lblmode ) UNKNOWN );
632632 break ;
633633 }
634634
@@ -703,17 +703,17 @@ static int analyzeRelativeTable(address table, opesize size,
703703 // (別のデータ形式かもしれないし、プログラム領域かもしれない)
704704 // ただしアドレス値だけで判定しているので確実とは言えない
705705 if (table == ptr )
706- regist_label (ptr , DATLABEL | UNKNOWN | FORCE );
706+ regist_label (ptr , DATLABEL | ( lblmode ) UNKNOWN | FORCE );
707707 else
708- regist_label (ptr , DATLABEL | UNKNOWN );
708+ regist_label (ptr , DATLABEL | ( lblmode ) UNKNOWN );
709709 break ;
710710 }
711711
712712#ifdef DEBUG_RELTBL_ADDRESS
713713 printReltblAddress (table , ptr , offs , label );
714714#endif
715715 if (table != label ) {
716- regist_label (label , DATLABEL | UNKNOWN );
716+ regist_label (label , DATLABEL | ( lblmode ) UNKNOWN );
717717 }
718718 ptr += bytes ;
719719
@@ -800,7 +800,7 @@ static int hasReltblData(address table) {
800800// テーブルの解析は他の解析が終わって判明した限りのラベルが登録されてからとなる。
801801void registerReltblOrder (ArrayBuffer * rtbuf , address table , opesize size ,
802802 boolean isProgram , lblmode mode ) {
803- if (mode ) regist_label (table , mode | size );
803+ if (mode ) regist_label (table , mode | ( lblmode ) size );
804804
805805 if (hasReltblData (table )) {
806806 ReltblOrder * p = getArrayBufferNewPlace (rtbuf );
@@ -820,7 +820,7 @@ extern void z_table(address table) {
820820 while (ptr + 4 <= tableend ) {
821821 address label = (address )peekl (ptr + Dis .Ofst );
822822
823- regist_label (label , DATLABEL | UNKNOWN );
823+ regist_label (label , DATLABEL | ( lblmode ) UNKNOWN );
824824 ptr += 4 ;
825825 tableend = next (ptr )-> label ;
826826 }
@@ -835,7 +835,7 @@ extern void not_program(address from, address to) {
835835 DisParam disp ;
836836 disasm * code = & disp .code ;
837837
838- ch_lblmod (from , DATLABEL | UNKNOWN | FORCE );
838+ ch_lblmod (from , DATLABEL | FORCE | ( lblmode ) UNKNOWN );
839839
840840 setDisParamPcPtr (& disp , from , Dis .Ofst );
841841 disp .pcEnd = to ;
@@ -862,45 +862,45 @@ static void regist_data(disasm* code, operand* op) {
862862
863863 case IMMED :
864864 if (code -> size2 == LONGSIZE && INPROG (op -> opval , op -> eaadrs ))
865- regist_label (op -> opval , DATLABEL | UNKNOWN );
865+ regist_label (op -> opval , DATLABEL | ( lblmode ) UNKNOWN );
866866 break ;
867867
868868 case AbLong :
869869 if (INPROG (op -> opval , op -> eaadrs ))
870- regist_label (op -> opval , DATLABEL | code -> size2 );
870+ regist_label (op -> opval , DATLABEL | ( lblmode ) code -> size2 );
871871 break ;
872872
873873 case PCDISP :
874874 case PCIDX :
875- regist_label (op -> opval , DATLABEL | code -> size2 );
875+ regist_label (op -> opval , DATLABEL | ( lblmode ) code -> size2 );
876876 break ;
877877
878878 case AregIDXB :
879879 if (op -> exbd == 4 && INPROG (op -> opval , op -> eaadrs ))
880- regist_label (op -> opval , DATLABEL | code -> size2 );
880+ regist_label (op -> opval , DATLABEL | ( lblmode ) code -> size2 );
881881 break ;
882882
883883 case AregPOSTIDX :
884884 case AregPREIDX :
885885 if (op -> exbd == 4 && INPROG (op -> opval , op -> eaadrs ))
886- regist_label (op -> opval , DATLABEL | LONGSIZE );
886+ regist_label (op -> opval , DATLABEL | ( lblmode ) LONGSIZE );
887887 if (op -> exod == 4 && INPROG (op -> opval2 , op -> eaadrs2 ))
888- regist_label (op -> opval2 , DATLABEL | code -> size2 );
888+ regist_label (op -> opval2 , DATLABEL | ( lblmode ) code -> size2 );
889889 break ;
890890
891891 case PCIDXB :
892892 if ((op -> flags & OPFLAG_PC_RELATIVE ) ||
893893 (op -> exbd == 4 && INPROG (op -> opval , op -> eaadrs )))
894- regist_label (op -> opval , DATLABEL | code -> size2 );
894+ regist_label (op -> opval , DATLABEL | ( lblmode ) code -> size2 );
895895 break ;
896896
897897 case PCPOSTIDX :
898898 case PCPREIDX :
899899 if ((op -> flags & OPFLAG_PC_RELATIVE ) ||
900900 (op -> exbd == 4 && INPROG (op -> opval , op -> eaadrs )))
901- regist_label (op -> opval , DATLABEL | LONGSIZE );
901+ regist_label (op -> opval , DATLABEL | ( lblmode ) LONGSIZE );
902902 if (op -> exod == 4 && INPROG (op -> opval2 , op -> eaadrs2 ))
903- regist_label (op -> opval2 , DATLABEL | code -> size2 );
903+ regist_label (op -> opval2 , DATLABEL | ( lblmode ) code -> size2 );
904904 break ;
905905 }
906906}
0 commit comments