Incidencia #20704

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

Abrir Fecha: 2010-02-18 00:50 Última actualización: 2010-03-27 16:07

Informador:
Propietario:
(Ninguno)
Tipo:
Estado:
Open
Prioridad:
1 - Lowest
Gravedad:
5 - Medium
Resolución:
Postponed
Fichero:
Ninguno

Details

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
  • Propietario Update from (Ninguno) to suikan
Comentario

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

2010-02-21 09:38 Updated by: suikan
Comentario

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
  • Componente Update from (Ninguno) to toppersjsp4lpc Release 1.0.2
2010-03-09 22:21 Updated by: suikan
Comentario

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

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

2010-03-11 22:13 Updated by: suikan
  • Propietario Update from suikan to (Ninguno)
Comentario

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

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

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

2010-03-14 21:38 Updated by: suikan
Comentario

追記。

上のコメントで論じているのは、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
  • Prioridad Update from 5 - Medium to 1 - Lowest
  • Resolución Update from Ninguno to Postponed
Comentario

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

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

Attachment File List

No attachments

Editar

Please login to add comment to this ticket » Entrar