From c75a22f32b5f03c5a9e8cd02acf51b3bb01159ca Mon Sep 17 00:00:00 2001 From: Mark Ryan Date: Fri, 17 Jun 2022 23:46:40 +0200 Subject: [PATCH 1/2] Fix align when aligned bug There was a bug in the linker which caused it to incorrectly compute the address of labels preceeded by an align directive that was already aligned, e.g., align 8 on 0x8000, was not working correctly. The bug is fixed and a test case has been added. Signed-off-by: Mark Ryan --- src/salink.c | 3 ++- tests/test_align_aligned/align_aligned.s | 9 +++++++++ tests/test_align_aligned/test.sh | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/test_align_aligned/align_aligned.s create mode 100755 tests/test_align_aligned/test.sh diff --git a/src/salink.c b/src/salink.c index bfe8810..9ed2e2a 100644 --- a/src/salink.c +++ b/src/salink.c @@ -441,7 +441,8 @@ static void prv_complete_absolutes_e(void) align = 1 << label->id; mask = align - 1; adjust = (real_off + label->off) & mask; - real_off += align - adjust; + if (adjust > 0) + real_off += align - adjust; continue; } if (label->off > 0xffff - real_off) { diff --git a/tests/test_align_aligned/align_aligned.s b/tests/test_align_aligned/align_aligned.s new file mode 100644 index 0000000..cc676d9 --- /dev/null +++ b/tests/test_align_aligned/align_aligned.s @@ -0,0 +1,9 @@ +.Main +align 8 +ld hl, l1 +.l1 +nop +ld hl, l2 +align 8 +.l2 +ret diff --git a/tests/test_align_aligned/test.sh b/tests/test_align_aligned/test.sh new file mode 100755 index 0000000..de374ec --- /dev/null +++ b/tests/test_align_aligned/test.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -e +rm align_aligned 2>/dev/null 1>&2 || true +rm *.x 2>/dev/null 1>&2 || true + +../../saimport *.s +../../salink 2>/dev/null 1>&2 +offset=`od -An -j1 -t x1 -N2 align_aligned | xargs` +if [ "$offset" != "03 80" ]; then + exit 1 +fi + +offset=`od -An -j5 -t x1 -N2 align_aligned | xargs` +if [ "$offset" != "08 80" ]; then + exit 1 +fi + +rm align_aligned +rm *.x + From 5841029e22a9cc004009075e73ae503f37a02edf Mon Sep 17 00:00:00 2001 From: Mark Ryan Date: Fri, 17 Jun 2022 23:50:59 +0200 Subject: [PATCH 2/2] Version 3 Update the version number. Signed-off-by: Mark Ryan --- src/state_base.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/state_base.h b/src/state_base.h index b84ba1e..04ab930 100644 --- a/src/state_base.h +++ b/src/state_base.h @@ -17,8 +17,8 @@ #ifndef SPECASM_STATE_READ_H #define SPECASM_STATE_READ_H -#define SPECASM_VERSION 2 -#define SPECASM_VERSION_STR "v2" +#define SPECASM_VERSION 3 +#define SPECASM_VERSION_STR "v3" #include