LLVMにRenesas RL78をPortingしようとしているのかな?

こんにちは。NoMaYです。

ウェブで調べ物をしていて気付いたのですが、RenesasさんはLLVM(今はGCCと並ぶ著名なフリーコンパイラ)にRL78をPortingしようとしているのかも、、、

[llvm-dev] New LLVM backend for Renesas RL78 MCU
Sebastian Perta via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 1 10:26:05 PDT 2020
lists.llvm.org/pipermail/llvm-dev/2020-April/140546.html
 

  • こんにちは。NoMaYです。

    以前に投稿したBlinkyサンプルプログラムのzipファイルにリストファイル(GNURL78)と逆アセンブルダンプファイル(LLVM-RL78とGNURL78)も入れておいたのですが、内蔵周辺レジスタアクセスのコードがLLVM-RL78はGNURL78より随分悪い件をちょっと調べていて気付いたことがありました。

    (1) LLVM向けiodefine.hではPIF0ビットは16ビットレジスタのビットの扱いになっていました
    (2) volatileが付いているので8ビットアクセスとなるビット操作命令を使うのはC言語規格とは整合しないですね
    (3) PIF0ビットが16ビットレジスタのビットの扱いなのはRL78/G14のGNURL78向けiodefine.hでも同じでした

    src/smc_gen/r_bsp/mcu/rl78_g23/register_access/llvm/iodefine.h

    #define PIF0 IF0_bit.no2

    #define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT

    union un_if0 {
        unsigned short if0;
        __BITS16 BIT;
    };

    typedef struct {
        unsigned short no0 :1;
        unsigned short no1 :1;
        unsigned short no2 :1;
        unsigned short no3 :1;
        unsigned short no4 :1;
        unsigned short no5 :1;
        unsigned short no6 :1;
        unsigned short no7 :1;
        unsigned short no8 :1;
        unsigned short no9 :1;
        unsigned short no10 :1;
        unsigned short no11 :1;
        unsigned short no12 :1;
        unsigned short no13 :1;
        unsigned short no14 :1;
        unsigned short no15 :1;
    } __BITS16;

     
    [追記]

    試しにiodefine.hを書き換えてみましたが、あまり変わらなかったですね。残念。

    現状の定義

    #define PIF0 IF0_bit.no2
    #define PMK0 MK0_bit.no2

     
    試しの定義

    #define PIF0 IF0L_bit.no2
    #define PMK0 MK0L_bit.no2

     
    現状での生成コード

    0000332a _R_Config_INTC_INTP0_Start:
    ;     PIF0 = 0U;    /* clear INTP0 interrupt flag */
        332a: 36 e0 ff                         movw hl, #65504
        332d: ab                               movw ax, [hl]
        332e: 5a f8 fb                         and 0xffef8, #251
        3331: 36 e0 ff                         movw hl, #65504
        3334: bb                               movw [hl], ax
    ;     PMK0 = 0U;    /* enable INTP0 interrupt */
        3335: 36 e4 ff                         movw hl, #65508
        3338: ab                               movw ax, [hl]
        3339: 5a f8 fb                         and 0xffef8, #251
        333c: 36 e4 ff                         movw hl, #65508
        333f: bb                               movw [hl], ax
    ; }
        3340: d7                               ret

     
    試しでの生成コード

    0000332a _R_Config_INTC_INTP0_Start:
    ;     PIF0 = 0U;    /* clear INTP0 interrupt flag */
        332a: 36 e0 ff                         movw hl, #65504
        332d: 8b                               mov a, [hl]
        332e: 71 ab                            clr1 a.2
        3330: 36 e0 ff                         movw hl, #65504
        3333: 9b                               mov [hl], a
    ;     PMK0 = 0U;    /* enable INTP0 interrupt */
        3334: 36 e4 ff                         movw hl, #65508
        3337: 8b                               mov a, [hl]
        3338: 71 ab                            clr1 a.2
        333a: 36 e4 ff                         movw hl, #65508
        333d: 9b                               mov [hl], a
    ; }
        333e: d7                               ret

     

  • こんにちは。NoMaYです。

    > LLVM-RL78+e2 studioですが、デバッグ中にバグの箇所が分かったのでソースを修正して(デバッグ中のまま)ビルドするとpermission deniedでリンクエラーになることがあります。(エラーにならない時もあり、何の手順が影響しているのかは分からないです。また、どっちのケースの頻度が多いかまでは数えていません。)

    COM PortデバッガだけでなくRenesas RL78 Simulatorでも起きました。(すみません、画面コピーをとり忘れました。) でも、未だに、何をしていると(何をした後だと)駄目になるのか、分からないです。

    > 実は、ICCRL78+e2 studio+IARビルドプラグインの組み合わせでも同様ですが(しかも、こちらは、ほぼ100%そうだったと記憶していますが)、GNURL78+e2 studio(やCC-RL+e2 studio)の組み合わせでは発生していませんでしたので、LLVM-RL78+e2 studioでも発生しないようにしてもらいたいですね、、、

    そういえば、実は、今は以前に投稿した別問題の対応でリンク時(というか正確にはリンク後)に、生成されたプログラムの特定領域を特定値でFILLするリンクオプション(というかリンク後オプションみたいな?)を指定しているのですけれども、それ以降は全く起きていませんでした。(どうやらリンカは一旦仮の名前でロードモジュールを生成して、リンカとは別ツールでパッチを当てた後、最終的に本来の名前のロードモジュールにコピーし直すようです。それが、どうも、問題を起きなくさせているような印象です。)

    もう来月にはe2 studio 2021-07?が出る筈ですけれども、再現方法不明では、もう間に合いませんね、、、

  • > もう来月にはe2 studio 2021-07?が出る筈ですけれども、

    7/14の日付で新しいのが出てますね。

  • こんにちは。NoMaYです。

    > 7/14の日付で新しいのが出てますね。

    情報どうもありがとうございます。LLVM for Renesas RL78 が 10.0.0.202104 --> 10.0.0.202107 とアップデートされていましたね。newlib nano が使えるようになったとのことで、使ってみると確かにビルドしたプログラムのサイズが大幅に小さくなりました。(GNURL78と同等(少しLLVM-RL78の方が小さい)になった。)

    手持ちのプログラムその1

    LLVM-RL78   49,958 バイト@10.0.0.202104 --> 23,646 バイト@10.0.0.202107
    GNURL78     24,386 バイト@4.9.2.202002
    CC-RL       16,426 バイト@V1.10.00
    ICCRL78     15,850 バイト@V4.21.1

     
    手持ちのプログラムその2

    LLVM-RL78   73,396 バイト@10.0.0.202104 --> 46,198 バイト@10.0.0.202107
    GNURL78     50,418 バイト@4.9.2.202002
    CC-RL       34,766 バイト@V1.10.00
    ICCRL78     対象外(評価版のサイズ制限(16Kバイト)を超えるので同一プログラムをビルド出来ない)

     
    注:
    (1) 各ツールのサイズ表示機能を使用しているので計測対象が微妙に異なるかも知れません
    (2) ICCRL78は評価版のサイズ制限(16Kバイト)の事情で関数ポインタの先の関数が64Kバイト内に制限されるコードです。
    (2') 他のコンパイラでは関数ポインタの先の関数が64Kバイト内に制限されないコードです。

  • こんにちは。NoMaYです。

    ルネサスさんのCC-XXコンパイラもLLVMテクノロジを採用していますが、これ程の差は何でしょうかね、、、もちろん、ルネサスさんのCC-XXコンパイラの開発者の方々が大変優秀な証拠ですね、と言ってしまえば終わりなのですが、これ程の差というのは技術的側面においてちょっと気になります。(計測対象が違っているかも知れないという可能性も含めて、、、)

    手持ちのプログラムその1

    LLVM-RL78   23,646 バイト@10.0.0.202107
    CC-RL       16,426 バイト@V1.10.00

     
    手持ちのプログラムその2

    LLVM-RL78   46,198 バイト@10.0.0.202107
    CC-RL       34,766 バイト@V1.10.00

     

  • NoMaYさん、こんにちは。情報ありがとうございます。
    上記のプログラムサイズは、ライブラリ分と実プログラム分の比率は大体どのような比率かわかりますでしょうか?

  • Stevieさん、こんにちは。NoMaYです。

    > ライブラリ分と実プログラム分の比率は大体どのような比率かわかりますでしょうか?

    明日以降になりますが、調べて、投稿しようと思います。

  • ありがとうございます!サイズ向けの最適化能力を見る場合はライブラリ分は除いた方がよいのかなと思いました。
    こちらもLLVMを試している所なので、情報があれば共有させて頂きますね

  • こんにちは。NoMaYです。

    ライブラリ分その他を除いた手元のソースから生成されたコードのサイズは以下の通りでした。

    手持ちのプログラムその2

    LLVM-RL78   41,195 バイト@10.0.0.202107
    CC-RL       33,258 バイト@V1.10.00

     
    なお、ライブラリ分その他を含んだサイズは以下の通りでした。(先日投稿した内容です。)

    手持ちのプログラムその2

    LLVM-RL78   46,198 バイト@10.0.0.202107
    CC-RL       34,766 バイト@V1.10.00

     
    以下、元データです。なお、マップファイル全体や生成されたリストファイルやダンプファイルを以下のzipファイルに固めてあります。

    rl78g14_llvm_rtosdemo_map_dump_20210804.zip

    LLVM-RL78(10.0.0.202107)の場合:

    手元のソースから生成されたコードのサイズ = (2c2  - d8) + (39c4  - 3820) + (d82a - 3acd) = a0eb = 41195 バイト

    mapファイルより抜粋

         VMA      LMA     Size Align Out     In      Symbol
    ...略...
          d8       d8      1ea     2 .lowtext
          d8       d8        0     2         <internal>:(.plt)
          d8       d8        4     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/port.o:(.lowtext)
          d8       d8        4     1                 _prvTaskExitError
          dc       dc       47     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/portasm.o:(.lowtext.vPortYield)
          dc       dc        0     1                 _vPortYield
          dc       dc        0     1                 _vSoftwareInterruptISR
    ...略...
         29a      29a       15     1         ./src/r_cg_serial_user.o:(.lowtext.u_wdt_interrupt)
         29a      29a       15     1                 _u_wdt_interrupt
         2af      2af       13     1         ./src/r_cg_serial_user.o:(.lowtext._u_wdt_interrupt)
         2af      2af       13     1                 __u_wdt_interrupt
         2c2      2c2        0     1         . = ALIGN ( 2 )
    ...略...
        3820     3820     aa84     4 .text
        3820     3820        0     1         . = ALIGN ( 2 )
        3820     3820       ae     4         ./src/FreeRTOS_Demo/Full_Demo/RegTest.o:(.text)
        3820     3820        0     1                 _vRegTest1Task
        3831     3831        0     1                 .loop1
        3878     3878        0     1                 _vRegTest2Task
        3889     3889        0     1                 .loop2
        38d0     38d0       f2     4         ./generate/start.o:(.text)
        38d2     38d2        0     1                 _PowerON_Reset
    ...略...
        39b4     39b4        0     1                 __rl78_init
        39bd     39bd        0     1                 __rl78_fini
        39c4     39c4       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memcpy.o):(.text)
        39c4     39c4       11     1                 _memcpy
        39d8     39d8       13     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memset.o):(.text)
        39d8     39d8       13     1                 _memset
        39ec     39ec        f     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memchr.o):(.text)
        39ec     39ec        f     1                 _memchr
        39fc     39fc       24     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memmove.o):(.text)
        39fc     39fc       24     1                 _memmove
        3a20     3a20       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcmp.o):(.text)
        3a20     3a20       11     1                 _strcmp
        3a34     3a34        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcpy.o):(.text)
        3a34     3a34        d     1                 _strcpy
        3a44     3a44        b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strlen.o):(.text)
        3a44     3a44        b     1                 _strlen
        3a50     3a50       1b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncat.o):(.text)
        3a50     3a50       1b     1                 _strncat
        3a6c     3a6c       16     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncmp.o):(.text)
        3a6c     3a6c       16     1                 _strncmp
        3a84     3a84       14     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncpy.o):(.text)
        3a84     3a84       14     1                 _strncpy
        3a98     3a98       26     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(mulsi3.S.obj):(.text)
        3a98     3a98        0     1                 __COM_lmul
        3a98     3a98        0     1                 ___mulsi3
        3ac0     3ac0        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(ashlhi3.S.obj):(.text)
        3ac0     3ac0        0     1                 ___ashlhi3
        3acd     3acd        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__malloc_r)
        3acd     3acd        5     1                 __malloc_r
        3ad2     3ad2        4     1         ./src/frtos_startup/freertos_helper.o:(.text.__free_r)
        3ad2     3ad2        4     1                 __free_r
        3ad6     3ad6        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__realloc_r)
        3ad6     3ad6        5     1                 __realloc_r
        3adb     3adb       2f     1         ./src/frtos_startup/freertos_helper.o:(.text._vTaskNotifyGiveFromISR_R_Helper)
        3adb     3adb       2f     1                 _vTaskNotifyGiveFromISR_R_Helper
    ...略...
        d819     d819       11     1         ./src/r_main.o:(.text._main)
        d819     d819       11     1                 _main
        d82a     d82a       42     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-sprintf.o):(.text._sprintf)
        d82a     d82a       42     1                 _siprintf
        d82a     d82a       42     1                 _sprintf
        d86c     d86c      112     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.___ssputs_r)
        d86c     d86c      112     1                 ___ssputs_r
        d97e     d97e      2a0     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.__svfprintf_r)
        d97e     d97e      2a0     1                 __svfiprintf_r
        d97e     d97e      2a0     1                 __svfprintf_r
        dc1e     dc1e       13     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_0)
        dc1e     dc1e       13     1                 _OUTLINED_FUNCTION_0
        dc31     dc31        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_1)
        dc31     dc31        a     1                 _OUTLINED_FUNCTION_1
        dc3b     dc3b        f     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_2)
        dc3b     dc3b        f     1                 _OUTLINED_FUNCTION_2
        dc4a     dc4a        c     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_3)
        dc4a     dc4a        c     1                 _OUTLINED_FUNCTION_3
        dc56     dc56        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_4)
        dc56     dc56        a     1                 _OUTLINED_FUNCTION_4
        dc60     dc60        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_5)
        dc60     dc60        8     1                 _OUTLINED_FUNCTION_5
        dc68     dc68        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_6)
        dc68     dc68        8     1                 _OUTLINED_FUNCTION_6
        dc70     dc70        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_7)
        dc70     dc70        8     1                 _OUTLINED_FUNCTION_7
        dc78     dc78        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_8)
        dc78     dc78        6     1                 _OUTLINED_FUNCTION_8
        dc7e     dc7e      1b8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_common)
        dc7e     dc7e      1b8     1                 __printf_common
        de36     de36      449     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_i)
        de36     de36      449     1                 __printf_i
        e27f     e27f        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_0)
        e27f     e27f        7     1                 _OUTLINED_FUNCTION_0
        e286     e286        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_1)
        e286     e286        7     1                 _OUTLINED_FUNCTION_1
        e28d     e28d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_2)
        e28d     e28d        6     1                 _OUTLINED_FUNCTION_2
        e293     e293        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_3)
        e293     e293        a     1                 _OUTLINED_FUNCTION_3
        e29d     e29d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_4)
        e29d     e29d        6     1                 _OUTLINED_FUNCTION_4
        e2a3     e2a3        1     1         . = ALIGN ( 2 )
        e2a4     e2a4        0     1 .textf
        e2a4     e2a4        0     1         . = ALIGN ( 2 )
    ...略...

     
    CC-RL(V1.10)の場合:

    手元のソースから生成されたコードのサイズ = 24b + 7f9f = 81ea = 33258 バイト(10進)

    mapファイルより抜粋

    SECTION                            START      END         SIZE   ALIGN
    ...略...
    .text
                                      00000273  000004bd       24b   1
    .RLIB
                                      000004cb  000004e9        1f   1
    .SLIB
                                      000004ea  00000aef       606   1
    ...略...
    .textf
                                      00003912  0000b8b0      7f9f   1
    ...略...                                                                                               
    SECTION=
    FILE=                               START        END    SIZE
      SYMBOL                            ADDR        SIZE    INFO      COUNTS  OPT
    ...略...
    SECTION=.text
    FILE=.\generate\CallWalker\cstart.obj
                                      00000273  000002bb        49
      _start
                                      00000273         0   entry,g         0
    ...略...
      _u_wdt_interrupt@1
                                      00000497        13   func ,l         0
      __u_wdt_interrupt@1
                                      000004aa        14   func ,l         1  ch

    SECTION=.RLIB
    FILE=memcpy
                                      000004cb  000004db        11
      _memcpy
                                      000004cb         0   none ,g         8
    FILE=memset
                                      000004dc  000004e9         e
      _memset
                                      000004dc         0   none ,g         d

    SECTION=.SLIB
    FILE=sprintf_tiny
                                      000004ea  000005a3        ba
      _sprintf_tiny
                                      000004ea        a2   func ,g         6
      __REL_sp@1
                                      0000058c        18   func ,l         2
    FILE=strcmp
                                      000005a4  000005b4        11
      _strcmp
                                      000005a4         0   none ,g         1
    FILE=strcpy
                                      000005b5  000005c1         d
      _strcpy
                                      000005b5         0   none ,g         5
    FILE=strlen
                                      000005c2  000005cc         b
      _strlen
                                      000005c2         0   none ,g         d
    FILE=strncat
                                      000005cd  000005e7        1b
      _strncat
                                      000005cd         0   none ,g         4
    FILE=strncmp
                                      000005e8  000005fd        16
      _strncmp
                                      000005e8         0   none ,g         1
    FILE=strncpy
                                      000005fe  00000611        14
      _strncpy
                                      000005fe         0   none ,g         3
    FILE=_REL_print_tiny
                                      00000612  00000ae5       4d4
      __REL_print_tiny
                                      00000612       41b   func ,g         1
      __CommonCode@17
                                      00000a2d         6   func ,l         3
      __CommonCode@16
                                      00000a33         6   func ,l         5
      __CommonCode@14
                                      00000a39         a   func ,l         4
      __CommonCode@13
                                      00000a43         9   func ,l         2
      __CommonCode@12
                                      00000a4c         a   func ,l         2
      __CommonCode@11
                                      00000a56        10   func ,l         2
      __CommonCode@10
                                      00000a66         f   func ,l         2
      __CommonCode@9
                                      00000a75        12   func ,l         2
      __CommonCode@8
                                      00000a87         7   func ,l         2
      __CommonCode@7
                                      00000a8e         6   func ,l         3
      __CommonCode@18
                                      00000a94         8   func ,l         2
      __CommonCode@6
                                      00000a9c         7   func ,l         2
      __CommonCode@15
                                      00000aa3         3   func ,l         2
      __CommonCode@5
                                      00000aa6         3   func ,l         8
      __CommonCode@4
                                      00000aa9         9   func ,l         2
      __CommonCode@3
                                      00000ab2        1d   func ,l         5
      __CommonCode@2
                                      00000acf         5   func ,l         6
      __CommonCode@1
                                      00000ad4         7   func ,l         5
      __CommonCode@0
                                      00000adb         b   func ,l         2
    FILE=isdigit
                                      00000ae6  00000aef         a
      _isdigit
                                      00000ae6         0   none ,g         1
    ...略...
    SECTION=.textf
    FILE=.\generate\CallWalker\cstart.obj
                                      00003912  00003959        48
      _INIT_BSS
                                      00003912         0   none ,g         1
      _INIT_DATA
                                      00003931         0   none ,g         1
      _exit
                                      00003958         0   none ,g         2
    FILE=.\generate\CallWalker\resetprg.obj
                                      0000395a  00003968         f
      _PowerON_Reset_PC
                                      0000395a         f   func ,g         1  ch
    ...略...
    FILE=.\src\UART3.obj
                                      0000b7fc  0000b8b0        b5
      _u_uart3_init_bf
                                      0000b7fc        16   func ,g         1  ch
      _u_uart3_get_blk
                                      0000b812        79   func ,g         1  ch
      _u_uart3_callback_receivedata
                                      0000b88b        26   func ,g         1