システム デバッガーでは、U-Boot のような自己再配置プログラムのソース レベル デバッグがサポートされています。自己再配置プログラムとは、ランタイム中にコードおよびデータ セクションを再配置するプログラムです。これらのファイルのデバッグ情報には、プログラム セクションがどこに再配置されたかの詳細は含まれません。そのため、プログラムの再配置先のアドレスをデバッガーに提供する必要があります。これは、次の 2 つの方法で実行できます。
- システム デバッガーの実行コンフィギュレーションをアップデートし、プログラム セクションの再配置先アドレスを指定します。
- をクリックし、システム デバッガーの実行コンフィギュレーションを開始します。
- Application ビューをクリックして、ダウンロードするアプリケーションを選択します。
- This is a self-relocating application をオンにします。
- Relative address to which the program sections are relocated テキスト ボックスにすべてのプログラム セクションを再配置するアドレスを入力します。
- デバッグ コンフィギュレーションを起動します。これで、ランタイム中にプログラム セクションが再配置されたときに、デバッガーに再配置されたセクションのソース レベル デバッグをサポートするのに十分な情報が供給されます。
注記: この方法は、デバッグ コンフィギュレーションの Target Setup ビューの Debug Type を Standalone に設定した場合にのみサポートされます。 - また、XSDB で
memmap
コマンド使用しても、プログラム セクションの再配置先アドレスを指定できます。XSDB のmemmap
コマンドを使用すると、デバッガーにシンボル ファイルを追加できます。これは、ターゲット上で既に実行中のアプリケーションをデバッグする際に便利です。たとえば、フラッシュからブートする場合などに便利です。再配置可能な ELF ファイルの場合は、-relocate-section-map
オプションを使用して再配置先アドレスを指定します。xsdb% targets 2 1 APU 2 ARM Cortex-A9 MPCore #0 (Suspended) 3 ARM Cortex-A9 MPCore #1 (Suspended) 4 xc7z020 xsdb% targets 2 xsdb% memmap -reloc 0x3bf37000 -file u-boot xsdb% stop Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x3ff7b478 (Suspended) xsdb% bt 0 0x3ff7b478 __udelay()+1005809800: lib/time.c, line 91 1 0x3ff7b4ac udelay()+1005809696: lib/time.c, line 104 2 0x3ff5d878 genphy_update_link()+1005809860: drivers/net/phy/phy.c, line 250 3 0x3ff5df84 m88e1118_startup()+1005809712: drivers/net/phy/marvell.c, line 356 4 0x3ff5d154 zynq_gem_init()+1005810192: drivers/net/zynq_gem.c, line 402 5 0x3ff7dc58 eth_init()+1005809720: net/eth.c, line 886 6 0x3ff7e0e4 net_loop()+1005809728: net/net.c, line 407 7 0x3ff46330 netboot_common()+1005809972: common/cmd_net.c, line 230 8 0x3ff46520 do_tftpb()+1005809708: common/cmd_net.c, line 33 9 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493 10 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493 11 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656 12 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656 13 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 14 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 15 0x3ff3b008 parse_string_outer()+1005809872: common/cli_hush.c, line 3254 16 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617 17 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617 18 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 19 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 20 0x3ff3afd0 parse_string_outer()+1005809816: common/cli_hush.c, line 3248 21 0x3ff5140c do_run()+1005809740: common/cli.c, line 131 22 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493 23 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493 24 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656 25 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656 26 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 27 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 28 0x3ff3b008 parse_string_outer()+1005809872: common/cli_hush.c, line 3254 29 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617 30 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617 31 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 32 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003 33 0x3ff3afd0 parse_string_outer()+1005809816: common/cli_hush.c, line 3248 34 0x3ff39ab4 main_loop()+1005809724: common/main.c, line 85 35 0x3ff3c4f4 run_main_loop()+1005809672: common/board_r.c, line 675 36 0x3ff73b54 initcall_run_list()+1005809716: lib/initcall.c, line 27 37 0x3ff3c66c board_init_r()+1005809676: common/board_r.c, line 908 38 0x3ff3837c clbss_l()+1005809688: arch/arm/lib/crt0.S, line 174 39 unknown-pc