[linux-m32r-ja:00141] Re: [dev:01127] Re: gcc-4.0でのデバッグ情報

Kazuhiro Inaoka inaoka.kazuhiro @ renesas.com
2005年 6月 29日 (水) 13:36:37 JST


.debugsymはそもそも行情報用に出力されたラベルに対して使用する
ものであったので、普通のローカルシンボルに適用した場合、無理が
あるようですね。

問題となるパターンと出力結果を添付しておきます。

アセンブル時のオプションは -O -m32r2を使用。

Kazuhiro Inaoka wrote:

> 稲岡です。
> 
> 下記パッチを使用していると問題がいくつかあることが判明しました。
> (カーネルのビルドで問題が発生しています)
> 使わない方がよさそうです。
> 
> 1)
> 下記パッチを適用したコンパイラから出力したアセンブリソースを
> アセンブルオプションに-m32r2 -Oを使用した場合に
> 不正コード( *unknown* )を出力するケースがあるようです。
> パラレルコードの生成及び、命令の置換に失敗し、結果として不正コードを
> 生成します。
> m32r-linux-asは2.15系2.16系いづれでも発生してしまいます。
> 
> 2)
> ローカルなシンボルがつねに.debugsym付きで出力されている。
> .balign 4とのコンビで出力されないと、アライメントが正しくとられない。
> 
> 
> Kazuhiro Inaoka wrote:
> 
>>m32r-linux-gcc-4.0以降は、デバッグ情報がデフォルトでDWARF2になっています。
>>
>>従来のstabの場合は、デバッグ情報用ラベルを.debugsymで特別なラベルに置換して
>>いたため、このラベルの位置でアライメントがとられることがありませんでした。
>>
>>従来(stab)
>>	push r0
>>	.debugsym .LM1
>>	push r1
>>
>>==> push r0 -> push r1
>>
>>DWARF2対応になったときに、DWARF2用のデバッグ情報用ラベルに同様の処理を
>>施していないために、現状では、このラベル位置でアライメントがとられ、
>>極端にPNOPが挿入されコード効率が悪くなってしまいます。
>>
>>DWARF2の場合
>>	push r0
>>.LM1:
>>	push r1
>>
>>==>	push r0 -> nop
>>	push r1
>>
>>stabで実施していたようなデバッグ情報用シンボルに対しての置換処理ようの
>>パッチを提供しておきますので、必要に応じてパッチを適用してください。
>>ただし、十分評価ができていないので、デバッグ等に問題が発生する可能性も
>>ありますので、問題が発見されましたら、連絡願います。
>>
>>
>>------------------------------------------------------------------------
>>
>>Index: m32r.h
>>===================================================================
>>RCS file: /cvs/gcc/gcc/gcc/config/m32r/m32r.h,v
>>retrieving revision 1.130
>>diff -u -r1.130 m32r.h
>>--- m32r.h	26 May 2005 05:27:52 -0000	1.130
>>+++ m32r.h	23 Jun 2005 09:53:08 -0000
>>@@ -1409,6 +1393,16 @@
>>      }									\
>>   while (0)
>> 
>>+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
>>+  fprintf (FILE, "\t.debugsym .%s%d\n", PREFIX, NUM)
>>+
>>+#define ASM_OUTPUT_INTERNAL_LABEL(FILE,NAME)    \
>>+  do {                                          \
>>+    fputs ("\t.debugsym ", (FILE));             \
>>+    assemble_name_raw ((FILE), (NAME));         \
>>+    fputs ("\n", (FILE));                      \
>>+  } while (0)
>>+
>> /* How to refer to registers in assembler output.
>>    This sequence is indexed by compiler's hard-register-number (see above).  */
>> #ifndef SUBTARGET_REGISTER_NAMES
>>
>>
>>------------------------------------------------------------------------
>>
>>_______________________________________________
>>dev mailing list
>>dev @ ml.linux-m32r.org
>>http://www.linux-m32r.org/mailman/listinfo/dev
> 
> 
> 
> _______________________________________________
> dev mailing list
> dev @ ml.linux-m32r.org
> http://www.linux-m32r.org/mailman/listinfo/dev
> 
-------------- next part --------------
文字コード指定の無い添付文書を取り除きました...
名前: bug.s
URL:  http://www.linux-m32r.org/pipermail/linux-m32r-ja/attachments/20050629/b7876e8d/bug.diff
-------------- next part --------------
文字コード指定の無い添付文書を取り除きました...
名前: bug.o.dmp
URL:  http://www.linux-m32r.org/pipermail/linux-m32r-ja/attachments/20050629/b7876e8d/bug.o.diff


linux-m32r-ja メーリングリストの案内