From 59a635ce3715bbdf20fe7373e9c65f5cad4f21c7 Mon Sep 17 00:00:00 2001 From: Andre Fachat Date: Fri, 1 Dec 2023 22:52:10 +0100 Subject: [PATCH] fix align bug --- xa/src/xad.h | 2 + xa/src/xat.c | 6 +-- xa/tests/align/Makefile | 100 ++++++++++++++++++++++++++++++++++++++++ xa/tests/align/t01.a65 | 10 ++++ xa/tests/align/t01.ok | Bin 0 -> 36 bytes xa/tests/align/t02.a65 | 10 ++++ xa/tests/align/t02.ok | Bin 0 -> 38 bytes xa/tests/align/t03.a65 | 10 ++++ xa/tests/align/t03.ok | Bin 0 -> 290 bytes xa/tests/align/t11.a65 | 10 ++++ xa/tests/align/t11.ok | Bin 0 -> 36 bytes xa/tests/align/t12.a65 | 10 ++++ xa/tests/align/t12.ok | Bin 0 -> 38 bytes xa/tests/align/t13.a65 | 10 ++++ xa/tests/align/t13.ok | Bin 0 -> 290 bytes xa/tests/align/t21.mok | 1 + xa/tests/align/t21.msg | 1 + xa/tests/align/t21.ok | Bin 0 -> 35 bytes xa/tests/align/t22.mok | 1 + xa/tests/align/t22.msg | 1 + xa/tests/align/t22.ok | Bin 0 -> 37 bytes xa/tests/align/t23.mok | 1 + xa/tests/align/t23.msg | 1 + xa/tests/align/t23.ok | Bin 0 -> 289 bytes xa/tests/align/t31.mok | 1 + xa/tests/align/t31.msg | 1 + xa/tests/align/t31.ok | Bin 0 -> 36 bytes xa/tests/align/t32.mok | 1 + xa/tests/align/t32.msg | 1 + xa/tests/align/t32.ok | Bin 0 -> 38 bytes xa/tests/align/t33.mok | 1 + xa/tests/align/t33.msg | 1 + xa/tests/align/t33.ok | Bin 0 -> 290 bytes xa/tests/align/t41.mok | 1 + xa/tests/align/t41.msg | 1 + xa/tests/align/t41.ok | Bin 0 -> 35 bytes xa/tests/align/t42.mok | 1 + xa/tests/align/t42.msg | 1 + xa/tests/align/t42.ok | Bin 0 -> 37 bytes xa/tests/align/t43.mok | 1 + xa/tests/align/t43.msg | 1 + xa/tests/align/t43.ok | Bin 0 -> 289 bytes 42 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 xa/tests/align/Makefile create mode 100644 xa/tests/align/t01.a65 create mode 100644 xa/tests/align/t01.ok create mode 100644 xa/tests/align/t02.a65 create mode 100644 xa/tests/align/t02.ok create mode 100644 xa/tests/align/t03.a65 create mode 100644 xa/tests/align/t03.ok create mode 100644 xa/tests/align/t11.a65 create mode 100644 xa/tests/align/t11.ok create mode 100644 xa/tests/align/t12.a65 create mode 100644 xa/tests/align/t12.ok create mode 100644 xa/tests/align/t13.a65 create mode 100644 xa/tests/align/t13.ok create mode 100644 xa/tests/align/t21.mok create mode 100644 xa/tests/align/t21.msg create mode 100644 xa/tests/align/t21.ok create mode 100644 xa/tests/align/t22.mok create mode 100644 xa/tests/align/t22.msg create mode 100644 xa/tests/align/t22.ok create mode 100644 xa/tests/align/t23.mok create mode 100644 xa/tests/align/t23.msg create mode 100644 xa/tests/align/t23.ok create mode 100644 xa/tests/align/t31.mok create mode 100644 xa/tests/align/t31.msg create mode 100644 xa/tests/align/t31.ok create mode 100644 xa/tests/align/t32.mok create mode 100644 xa/tests/align/t32.msg create mode 100644 xa/tests/align/t32.ok create mode 100644 xa/tests/align/t33.mok create mode 100644 xa/tests/align/t33.msg create mode 100644 xa/tests/align/t33.ok create mode 100644 xa/tests/align/t41.mok create mode 100644 xa/tests/align/t41.msg create mode 100644 xa/tests/align/t41.ok create mode 100644 xa/tests/align/t42.mok create mode 100644 xa/tests/align/t42.msg create mode 100644 xa/tests/align/t42.ok create mode 100644 xa/tests/align/t43.mok create mode 100644 xa/tests/align/t43.msg create mode 100644 xa/tests/align/t43.ok diff --git a/xa/src/xad.h b/xa/src/xad.h index 2c2a64c..244241f 100644 --- a/xa/src/xad.h +++ b/xa/src/xad.h @@ -39,4 +39,6 @@ t[i++] = f & 255; \ } while (0) +#define wval_len 5 /* number of bytes stored in wval() call */ + #endif /* __XA65_XAD_H__ */ diff --git a/xa/src/xat.c b/xa/src/xat.c index 4a71e11..cd03db0 100644 --- a/xa/src/xat.c +++ b/xa/src/xat.c @@ -834,12 +834,12 @@ printf("reloc: er=%d, l=%d, segment=%d, pc[%d]=%04x, pc[abs(%d)]=%04x, pc[text(% t[0]=Kdsb; i=1; bl=tmp=(tmp - (pc[segment] & (tmp-1))) & (tmp-1); - wval(i,tmp, 0); + wval(i,tmp, 0); // 5 byte t[i++]=','; tmp2= 0xea; - wval(i,tmp2, 0); /* nop opcode */ + wval(i,tmp2, 0); /* nop opcode, another 5 byte */ t[i++]=T_END; - *ll=9; + *ll=wval_len * 2 + 3; //13; //9; er=E_OKDEF; } else { *ll=0; /* ignore if aligned right */ diff --git a/xa/tests/align/Makefile b/xa/tests/align/Makefile new file mode 100644 index 0000000..206eb76 --- /dev/null +++ b/xa/tests/align/Makefile @@ -0,0 +1,100 @@ + +XA=../../xa + +default: all +all: t01 t02 t03 t11 t12 t13 t21 t22 t23 t31 t32 t33 t41 t42 t43 + +# BSD only has suffix rules + +.SUFFIXES: .o65 .hex .a65 + +#%.o65: %.s +.a65.o65: + ${XA} -R -c -o $@ $< + +#%.hex: %.o65 +.o65.hex: + ../hextool $< > $@ + +############################################### +# text segment correctly aligned + +t01: t01.o65 + cmp $@.o65 $@.ok + +t02: t02.o65 + cmp $@.o65 $@.ok + +t03: t03.o65 + cmp $@.o65 $@.ok + +############################################### +# data segment correctly aligned + +t11: t11.o65 + cmp $@.o65 $@.ok + +t12: t12.o65 + cmp $@.o65 $@.ok + +t13: t13.o65 + cmp $@.o65 $@.ok + +############################################### +# text segment incorrectly aligned + +t21: t01.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t22: t02.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t23: t03.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +############################################### +# text segment correctly aligned, but data segment not (even if empty) + +t31: t01.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t32: t02.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t33: t03.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +############################################### +# data segment incorrectly aligned + +t41: t11.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t42: t12.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t43: t13.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + + +clean: + rm -f *.o65 *.hex + diff --git a/xa/tests/align/t01.a65 b/xa/tests/align/t01.a65 new file mode 100644 index 0000000..0cb893e --- /dev/null +++ b/xa/tests/align/t01.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 2 + + tay + + diff --git a/xa/tests/align/t01.ok b/xa/tests/align/t01.ok new file mode 100644 index 0000000000000000000000000000000000000000..d985cf3cb252043cddf865abd44add735212f8d1 GIT binary patch literal 36 jcmZQ%$Tu@(U=&~wU}j)oVPIfzfKWizidQRuBoF`qH?#wS literal 0 HcmV?d00001 diff --git a/xa/tests/align/t02.a65 b/xa/tests/align/t02.a65 new file mode 100644 index 0000000..21605cc --- /dev/null +++ b/xa/tests/align/t02.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 4 + + tay + + diff --git a/xa/tests/align/t02.ok b/xa/tests/align/t02.ok new file mode 100644 index 0000000000000000000000000000000000000000..2838a66af02092f17f8d9d9971aca6fa1e2daf8d GIT binary patch literal 38 lcmZQ%$Tu@(U=m;uU}a!nVPIfzfKWizidU~*tpL(M002!&1z7+9 literal 0 HcmV?d00001 diff --git a/xa/tests/align/t03.a65 b/xa/tests/align/t03.a65 new file mode 100644 index 0000000..69e4fe1 --- /dev/null +++ b/xa/tests/align/t03.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 256 + + tay + + diff --git a/xa/tests/align/t03.ok b/xa/tests/align/t03.ok new file mode 100644 index 0000000000000000000000000000000000000000..6eeab056e406901dd6cec958fc50b245c9a65b83 GIT binary patch literal 290 ncmZQ%$Tu@(U>0ByU}R)qVPIfzU;tA<){0jn8>|3^0T2KH50LAx literal 0 HcmV?d00001 diff --git a/xa/tests/align/t11.a65 b/xa/tests/align/t11.a65 new file mode 100644 index 0000000..81ecca1 --- /dev/null +++ b/xa/tests/align/t11.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 2 + + tay + + diff --git a/xa/tests/align/t11.ok b/xa/tests/align/t11.ok new file mode 100644 index 0000000000000000000000000000000000000000..2e3002e781e048393c6c91d211d08739ea7ef2c3 GIT binary patch literal 36 jcmZQ%$Tu@(U=&~wU|?WiVP;@(08&6E5UhB$0>S_QH>d-G literal 0 HcmV?d00001 diff --git a/xa/tests/align/t12.a65 b/xa/tests/align/t12.a65 new file mode 100644 index 0000000..2c9b98e --- /dev/null +++ b/xa/tests/align/t12.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 4 + + tay + + diff --git a/xa/tests/align/t12.ok b/xa/tests/align/t12.ok new file mode 100644 index 0000000000000000000000000000000000000000..51b7e8036a16b0bb5646aafbf3f5f852b0e9c44e GIT binary patch literal 38 lcmZQ%$Tu@(U=m;uU|?WiVP#-&08&6E5UhCh>eUJe697#%1z7+9 literal 0 HcmV?d00001 diff --git a/xa/tests/align/t13.a65 b/xa/tests/align/t13.a65 new file mode 100644 index 0000000..fc4a388 --- /dev/null +++ b/xa/tests/align/t13.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 256 + + tay + + diff --git a/xa/tests/align/t13.ok b/xa/tests/align/t13.ok new file mode 100644 index 0000000000000000000000000000000000000000..01f08622dc4aaa23156966a14210f412660e4053 GIT binary patch literal 290 mcmZQ%$Tu@(U>0ByU|?WiVPs@*08&6E5UhALvcU>SFaQ7#i0iKa literal 0 HcmV?d00001 diff --git a/xa/tests/align/t21.mok b/xa/tests/align/t21.mok new file mode 100644 index 0000000..7d5c4f8 --- /dev/null +++ b/xa/tests/align/t21.mok @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t21.msg b/xa/tests/align/t21.msg new file mode 100644 index 0000000..7d5c4f8 --- /dev/null +++ b/xa/tests/align/t21.msg @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t21.ok b/xa/tests/align/t21.ok new file mode 100644 index 0000000000000000000000000000000000000000..8eb258714fdb59fc9e53c0cbfdc2c915753614d6 GIT binary patch literal 35 hcmZQ%$Tu@(U=(0vVParlVPIfzfKWiziWNWt2mmcU0*n9v literal 0 HcmV?d00001 diff --git a/xa/tests/align/t22.mok b/xa/tests/align/t22.mok new file mode 100644 index 0000000..d00c961 --- /dev/null +++ b/xa/tests/align/t22.mok @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t22.msg b/xa/tests/align/t22.msg new file mode 100644 index 0000000..d00c961 --- /dev/null +++ b/xa/tests/align/t22.msg @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t22.ok b/xa/tests/align/t22.ok new file mode 100644 index 0000000000000000000000000000000000000000..5cc8ec6c5ab9d6c0dafe7ac8fb459befd87b1015 GIT binary patch literal 37 icmZQ%$Tu@(U=m0s;U)0CxVPIrnVPIfzU;tA<){0jn8ms^Y0T2KH5ccZ1 literal 0 HcmV?d00001 diff --git a/xa/tests/align/t31.mok b/xa/tests/align/t31.mok new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t31.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t31.msg b/xa/tests/align/t31.msg new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t31.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t31.ok b/xa/tests/align/t31.ok new file mode 100644 index 0000000000000000000000000000000000000000..8131eb027f94964eab833fd2139dcd8bd066b12b GIT binary patch literal 36 jcmZQ%$Tu@(U=&~wU}j)sVPIfzU|;}IK(OM~3J3!LH_QWr literal 0 HcmV?d00001 diff --git a/xa/tests/align/t32.mok b/xa/tests/align/t32.mok new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t32.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t32.msg b/xa/tests/align/t32.msg new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t32.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t32.ok b/xa/tests/align/t32.ok new file mode 100644 index 0000000000000000000000000000000000000000..05890a991c8bfa1fd7fdbcc7805e6c8c8da84d94 GIT binary patch literal 38 lcmZQ%$Tu@(U=m;uU}a!rVPIfzU|;}IK(OM~t5+)^OaM(}1zG?A literal 0 HcmV?d00001 diff --git a/xa/tests/align/t33.mok b/xa/tests/align/t33.mok new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t33.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t33.msg b/xa/tests/align/t33.msg new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t33.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t33.ok b/xa/tests/align/t33.ok new file mode 100644 index 0000000000000000000000000000000000000000..ededf6677ed7ee172e875d59ff78dd88de6f7ca7 GIT binary patch literal 290 mcmZQ%$Tu@(U>0ByU}R)uVPIfzU|;}IK(OM~$ObDQ!2kddrt7c( literal 0 HcmV?d00001 diff --git a/xa/tests/align/t41.mok b/xa/tests/align/t41.mok new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t41.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t41.msg b/xa/tests/align/t41.msg new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t41.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t41.ok b/xa/tests/align/t41.ok new file mode 100644 index 0000000000000000000000000000000000000000..b834fbc1bdc60778ca4613afe6f2bb8ae100c059 GIT binary patch literal 35 icmZQ%$Tu@(U=&~wU|?WmVPar#U|?Wj0D~1PAT$6jY66%5 literal 0 HcmV?d00001 diff --git a/xa/tests/align/t42.mok b/xa/tests/align/t42.mok new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t42.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t42.msg b/xa/tests/align/t42.msg new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t42.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t42.ok b/xa/tests/align/t42.ok new file mode 100644 index 0000000000000000000000000000000000000000..bdd3cc0baa2b365c6027ec50ed4f4c565968dacb GIT binary patch literal 37 kcmZQ%$Tu@(U=m;uU|?WmVPRl!U|;}}Ah6=qs}&Fy074-IZvX%Q literal 0 HcmV?d00001 diff --git a/xa/tests/align/t43.mok b/xa/tests/align/t43.mok new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t43.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t43.msg b/xa/tests/align/t43.msg new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t43.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t43.ok b/xa/tests/align/t43.ok new file mode 100644 index 0000000000000000000000000000000000000000..1384ef4cf997462fa72ff48b5f14a5108746b5bb GIT binary patch literal 289 mcmZQ%$Tu@(U>0ByU|?WmVPIr%U|?Wj0D~2;Ml@If2?YQi4(i1K literal 0 HcmV?d00001