待辦事項 #20704

カーネルライブラリを指定するとリンクに失敗する

啟用日期: 2010-02-18 00:50 最後更新: 2010-03-27 16:07

回報者:
負責人:
(無)
類型:
狀態:
開啟
優先權:
1 - 最低
嚴重程度:
5 - 中
處理結果:
Postponed
檔案:

細節

Makefileにてカーネルライブラリ(KERNEL_LIB)を指定すると、リンク時にエラーとなってしまう。具体的な再現手順を以下に示します。

$ mkdir KERNEL
$ cd KERNEL
$ ../jsp/configure -C armv4 -S cq_frk_nxp_arm
...
$ make depend
...
$ make libkernel.a
...
$ cd ..
$ mkdir sample1
$ cd sample1
$ ../jsp/configure -C armv4 -S cq_frk_nxp_arm -L ../KERNEL
...
$ make depend
...
$ make
....
arm-none-eabi-gcc  -mcpu=arm9tdmi  -mlittle-endian     -O2 -g  -DGDB_STUB -I. -I../jsp/include  -I../jsp/config/armv4/cq_frk_nxp_arm -I../jsp/config/armv4/_common_lpc2388 -I../jsp/pdic/simple_sio -I../jsp/config/armv4 -nostdlib  -mcpu=arm9tdmi  -N  -mlittle-endian  -T ../jsp/config/armv4/_common_lpc2388/lpc2388.ld -o jsp \
			start.o  sample1.o     timer.o serial.o logtask.o log_output.o vasyslog.o t_perror.o strerror.o  kernel_cfg.o   ../KERNEL/libkernel.a   -lgcc 
/opt/arm-2009q3/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/bin/ld: cannot find chip_mmr.o
collect2: ld returned 1 exit status
make: *** [jsp] エラー 1
$ 

Ticket History (3/10 Histories)

2010-02-18 00:50 Updated by: sirius506
  • New Ticket "カーネルライブラリを指定するとリンクに失敗する" created
2010-02-20 22:57 Updated by: suikan
  • 負責人 Update from (無) to suikan
評語

システム依存部のMakefile.dependか、LDスクリプトの記述に何らかの問題があると思われる。

2010-02-21 09:38 Updated by: suikan
評語

CQ_FRK_NXP_ARMで問題再現を確認。一方でIntegrator(配布そのまま)では問題は起きない。chip_mmr.oの名前はMakefile.dependで参照されているほか、LDスクリプトでも参照されているのでそちらの問題も視野に入れて取り組むべき。

2010-02-21 10:16 Updated by: suikan
2010-02-21 10:31 Updated by: suikan
  • 元件 Update from (無) to toppersjsp4lpc Release 1.0.2
2010-03-09 22:21 Updated by: suikan
評語

ビルドが通らないのはldファイルの中でオブジェクトの名前を直接指定しているためである。

報告されている構成例の場合、jsp/config/armv4/_common_lpc2388/lpc2388.ld ファイルの中の"chip_mmr.o"を、すべて"../KERNEL/libkernel.a"に変更すると、ビルドは通るようになる。しかし、こうするとレジスタ名が変数として使えなくなる。さらなる調査が必要である。

2010-03-11 22:13 Updated by: suikan
  • 負責人 Update from suikan to (無)
評語

LDスクリプトの中で、レジスタに相当する変数の為のインプット・セクション指定をしている。そのセクションのソースとしてファイル名を指定するのだが、ファイル名の指定のしかたで結果が異なる。

  • chip_mmr.o : 変数名が保存され、デバッガから見える。
  • libkernel.a : 変数名が消え、デバッガから見えない。
  • *.o : 変数名が消え、デバッガから見えない。
  • * : 変数名が消え、デバッガから見えない。

理由は不明である。リンカのバグである可能性もあるが、その他の条件の組み合わせが多いことなどから、これ以上の調査は困難に思える。

2010-03-14 21:38 Updated by: suikan
評語

追記。

上のコメントで論じているのは、lpc2388.ldの以下の部分である。

	.bss.firmmr (NOLOAD) : { chip_mmr.o(.MMR0)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4000; chip_mmr.o(.MMR1)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4010; chip_mmr.o(.MMR2)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4030; chip_mmr.o(.MMR3)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4050; chip_mmr.o(.MMR4)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4070; chip_mmr.o(.MMR5)} > MEM_FIO
	.bss.firmmr (NOLOAD) : { . = 0x4090; chip_mmr.o(.MMR6)} > MEM_FIO

ここで、chip_mmr.oの部分を書き換えると、結果が変わる。場合によってはコンパイルエラーが発生し、場合によってはデバッガ用の変数情報が消える。

2010-03-27 16:07 Updated by: suikan
  • 優先權 Update from 5 - 中 to 1 - 最低
  • 處理結果 Update from to Postponed
評語

これまでのところ有効な解決策が見つかっていない。 また、カーネルライブラリを作らないという回避策があるため、有効な解決策が見つかるまで優先順位を下げることにする。

2010-03-29 09:01 Updated by: None

Attachment File List

No attachments

編輯

Please login to add comment to this ticket » 登入