Skip to content

Commit

Permalink
fea:t add --omit-bss option
Browse files Browse the repository at this point in the history
  • Loading branch information
kg68k committed Oct 5, 2024
1 parent fe32619 commit 547d68b
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 11 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 1.1.0 (2024-10-06)

* `--omit-bss`オプションを追加。


# 1.0.0 (2024-03-16)

* 実行ファイル名をhlkx.rに変更。
Expand Down
15 changes: 15 additions & 0 deletions hlkx.txt
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,21 @@ as v3.00で出力されるオブジェクトコマンドに対応しました。
 MACS(.mcs)形式でファイルを出力します。拡張子が省略された場合は.mcs
になります。-rオプションが自動的に設定されます。

--omit-bss ... .r形式ファイルの作成時にBSSを出力しない

 -rオプションを指定して.r形式実行ファイルを作成する際、ブロックスト
レージセクションを出力しません。

 XCのCV.Xで.r形式に変換するとBSSが出力されませんが、その挙動を意図
的に利用しているプログラムもあります。プロセス起動後にメモリブロック
がBSSを含む大きさであることを自分自身で確認し、ゼロクリアしているも
のです。そのようなプログラムをhlkxで.r形式に変換する際にこのオプショ
ンを指定します。

 .x形式として作られているプログラム(プロセス起動時にBSSのメモリが確
保され、ゼロクリアされていることを前提としているもの)に対してはこの
オプションを指定してはいけません。


━☆ 変更点(その他) ☆━━━━━━━━━━━━━━━━━━━━━━━━━

Expand Down
6 changes: 2 additions & 4 deletions src/Makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
# Makefile for HLKX

AS = has060
ASFLAGS = -c4
ASFLAGS = -w3 -c4

ifndef LD
LD = hlk
endif
LD ?= hlk
ifeq ($(findstring hlkx,$(LD)),hlkx)
USE_HLKX = true
endif
Expand Down
1 change: 1 addition & 0 deletions src/hlk.mac
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ OPT_AN_FLAG: .ds.b 1
EXEC_FILE_TYPE: .ds.b 1
OPT_RN_FLAG: .ds.b 1
MAKEMCS_FLAG: .ds.b 1
OMIT_BSS_FLAG: .ds.b 1

SLASH_CHAR: .ds.b 1

Expand Down
22 changes: 15 additions & 7 deletions src/main.s
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.title main control module

VERSION: .reg '1.0.0'
VERSION: .reg '1.1.0'


* Include File -------------------------------- *
Expand Down Expand Up @@ -993,12 +993,14 @@ ana_opt_long_opt_loop:
jmp (long_opt_table,pc,d1.w)

long_opt_table:
@@: .dc str_help-@b ,print_usage-@b
.dc str_quiet-@b ,ana_opt_b550-@b
.dc str_verbose-@b ,ana_opt_b400-@b
.dc str_version-@b ,print_version-@b
.dc str_makemcs-@b, ,option_makemcs-@b
.dc 0
@@:
.dc str_help-@b, print_usage-@b
.dc str_quiet-@b, ana_opt_b550-@b
.dc str_verbose-@b,ana_opt_b400-@b
.dc str_version-@b,print_version-@b
.dc str_makemcs-@b,option_makemcs-@b
.dc str_omitbss-@b,option_omitbss-@b
.dc 0


ana_opt_b30_:
Expand Down Expand Up @@ -1293,6 +1295,10 @@ ana_opt_check_an_rn:
subq.l #1,a2
@@: bra ana_opt_next

* --omit-bss
option_omitbss:
st (OMIT_BSS_FLAG,a6)
bra ana_opt_next

* -e num (set align)
ana_opt_b700:
Expand Down Expand Up @@ -1890,6 +1896,7 @@ usage_msg: .dc.b 'usege: hlkx [switch] file [+file] ...',CRLF
.dc.b ' -z / --quiet -v/--verbose オプションを取り消す',CRLF
.dc.b ' -v / --verbose 詳細表示',CRLF
.dc.b ' --makemcs MACS(.mcs)形式ファイルの作成',CRLF
.dc.b ' --omit-bss .r 形式ファイルの作成時にBSSを出力しない',CRLF
.dc.b ' --version バージョン表示',CRLF
.dc.b CRLF
.dc.b ' 環境変数 HLK の内容がコマンドラインの手前に挿入されます。',CRLF
Expand All @@ -1901,6 +1908,7 @@ str_quiet: .dc.b 'quiet',0
str_verbose: .dc.b 'verbose',0
str_version: .dc.b 'version',0
str_makemcs: .dc.b 'makemcs',0
str_omitbss: .dc.b 'omit-bss',0

too_many_args: .dc.b '引数が多すぎます。',CRLF
.dc.b 0
Expand Down
4 changes: 4 additions & 0 deletions src/make_exe.s
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,10 @@ make_exe_b20:
bne make_exe_err_adr

make_exe_r_no_check:
tst.b (OMIT_BSS_FLAG,a0)
beq @f
clr.l (X_BssSize,a3)
@@:
move.l (X_BssSize,a3),d0 ;bssは確保できるか?
cmp.l d0,d7
bcs malloc_err
Expand Down

0 comments on commit 547d68b

Please sign in to comment.