Skip to content

Commit 9d00e05

Browse files
committed
esp32: add Bluetooth controller ROM symbols and reserve its memory
The Bluetooth controller blob libbtdm_app.a gets most of its code from the ESP32 ROM. targets/esp32.ld gave no Bluetooth ROM symbol, so the blob could not link. This adds the 273 symbols that the blob and the driver need. The addresses come from ESP-IDF v5.5 components/esp_rom/esp32/ld/esp32.rom.ld and are the same on all ESP32 silicon revisions. The controller also uses exchange memory at 0x3FFB0000 and BSS at 0x3FFB8000. These addresses are fixed in ROM and were inside the stack and the Go heap. The new .btdm_reserved section keeps this 64K block free. The reservation occurs only when the espradio Bluetooth driver is linked in, because the section length tests for the driver symbol _btdm_mem_needed and --gc-sections removes that symbol with the driver. A program that uses Bluetooth has a heap of 122K. All other programs keep the full 186K. This is the first of three changes that give Bluetooth LE to the classic ESP32. The driver changes are in espradio.
1 parent 8bff1ab commit 9d00e05

1 file changed

Lines changed: 303 additions & 1 deletion

File tree

targets/esp32.ld

Lines changed: 303 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ MEMORY
1818
/* SRAM2 usable DRAM (0x3FFB0000-0x3FFE0000, 192K): reserve the first 8KB
1919
* (0x3FFAE000-0x3FFB0000) for ROM PHY data (rom_phyFuns at 0x3FFAE0C0),
2020
* then use the rest for the stack, initialized .data, .bss, and the Go
21-
* GC heap. */
21+
* GC heap. The .btdm_reserved section below keeps the first 64K free when
22+
* the Bluetooth driver is linked in. */
2223
DRAM (rw) : ORIGIN = 0x3FFB0000, LENGTH = 192K
2324

2425
/* Top of SRAM1 (0x3FFF0000-0x40000000, 64K): pool 7 + pool 6. This is the
@@ -55,6 +56,22 @@ SECTIONS
5556
_rodata_end = ABSOLUTE(.);
5657
} >DROM
5758

59+
/* The Bluetooth controller uses exchange memory at 0x3FFB0000 and BSS at
60+
* 0x3FFB8000. The addresses are fixed in ROM, so this 64K block must stay
61+
* free. The espradio Bluetooth driver defines _btdm_mem_needed. Programs
62+
* that do not use Bluetooth keep the 64K, because --gc-sections removes
63+
* the symbol with the driver.
64+
* See ESP-IDF components/bt/controller/esp32/bt.c, btdm_dram_available_region.
65+
*/
66+
.btdm_reserved (NOLOAD) :
67+
{
68+
. = ALIGN(4);
69+
_btdm_reserved_start = ABSOLUTE(.);
70+
. += DEFINED(_btdm_mem_needed) ? 0x10000 : 0;
71+
_btdm_reserved_end = ABSOLUTE(.);
72+
} >DRAM
73+
ASSERT(_btdm_reserved_start == 0x3FFB0000, "BT reserved block must start at 0x3FFB0000")
74+
5875
/* Put the stack at the bottom of DRAM, so that the application will
5976
* crash on stack overflow instead of silently corrupting memory.
6077
*/
@@ -339,3 +356,288 @@ PROVIDE(ets_isr_attach = 0x400067ec);
339356
PROVIDE(ets_isr_mask = 0x400067fc);
340357
PROVIDE(ets_isr_unmask = 0x40006808);
341358
PROVIDE(roundup2 = 0x4000ab7c);
359+
360+
/* From ESP-IDF:
361+
* components/esp_rom/esp32/ld/esp32.rom.ld
362+
* Bluetooth controller ROM functions and data. libbtdm_app.a gets most of its
363+
* undefined symbols from here. The addresses are the same on all ESP32
364+
* silicon revisions.
365+
*/
366+
PROVIDE(AddBigHexModP256 = 0x40015c98);
367+
PROVIDE(btdm_r_btdm_option_data_p_get = 0x40010004);
368+
PROVIDE(btdm_r_btdm_rom_version_get = 0x40010078);
369+
PROVIDE(btdm_r_import_rf_phy_func_p_get = 0x40054298);
370+
PROVIDE(btdm_r_ip_func_p_get = 0x40019af0);
371+
PROVIDE(btdm_r_modules_func_p_get = 0x4005427c);
372+
PROVIDE(btdm_r_plf_func_p_set = 0x40054288);
373+
PROVIDE(bt_util_buf_env = 0x3ffb8bd4);
374+
PROVIDE(co_default_bdaddr = 0x3ffae704);
375+
PROVIDE(co_null_bdaddr = 0x3ffb80e0);
376+
PROVIDE(_data_start_btdm_rom = 0x4000d4f4);
377+
PROVIDE(_data_start_btdm = 0x3ffae6e0);
378+
PROVIDE(_data_end_btdm = 0x3ffaff10);
379+
PROVIDE(_bss_start_btdm = 0x3ffb8000);
380+
PROVIDE(_bss_end_btdm = 0x3ffbff70);
381+
PROVIDE(dbg_state = 0x3ffb8d5d);
382+
PROVIDE(ecc_env = 0x3ffb8d60);
383+
PROVIDE(em_buf_env = 0x3ffb8d74);
384+
PROVIDE(rwip_coex_cfg = 0x3ff9914c);
385+
PROVIDE(rwip_priority = 0x3ff99159);
386+
PROVIDE(hci_env = 0x3ffb9350);
387+
PROVIDE(rwip_env = 0x3ffb8bcc);
388+
PROVIDE(hci_fc_env = 0x3ffb9340);
389+
PROVIDE(ke_env = 0x3ffb93cc);
390+
PROVIDE(ke_handler_search = 0x4001a430);
391+
PROVIDE(ke_task_env = 0x3ffb81d4);
392+
PROVIDE(lb_default_state_tab_p_get = 0x4001c198);
393+
PROVIDE(lb_env = 0x3ffb9424);
394+
PROVIDE(lb_hci_cmd_handler_tab_p_get = 0x4001c18c);
395+
PROVIDE(lc_default_state_tab_p_get = 0x4002f494);
396+
PROVIDE(lc_env = 0x3ffb94ec);
397+
PROVIDE(lc_hci_cmd_handler_tab_p_get = 0x4002f488);
398+
PROVIDE(lc_state = 0x3ffb9508);
399+
PROVIDE(ld_env = 0x3ffb9510);
400+
PROVIDE(llc_default_state_tab_p_get = 0x40046058);
401+
PROVIDE(llc_env = 0x3ffb96d0);
402+
PROVIDE(llc_hci_cmd_handler_tab_p_get = 0x40042358);
403+
PROVIDE(llcp_pdu_handler_tab_p_get = 0x40043f64);
404+
PROVIDE(lld_evt_deferred_elt_push = 0x400466b4);
405+
PROVIDE(lld_evt_deferred_elt_pop = 0x400466dc);
406+
PROVIDE(lld_evt_slave_time_compute = 0x40046818);
407+
PROVIDE(lld_evt_env = 0x3ffb9704);
408+
PROVIDE(lld_evt_elt_wait_get = 0x400468e4);
409+
PROVIDE(lld_evt_get_next_free_slot = 0x4004692c);
410+
PROVIDE(lld_pdu_llcp_pk_desc_tab = 0x3ff98b68);
411+
PROVIDE(lld_pdu_tx_flush_list = 0x4004a760);
412+
PROVIDE(lld_pdu_pack = 0x4004ab14);
413+
PROVIDE(LLM_AA_CT1 = 0x3ff98d8a);
414+
PROVIDE(LLM_AA_CT2 = 0x3ff98d88);
415+
PROVIDE(llm_default_state_tab_p_get = 0x4004e718);
416+
PROVIDE(llm_hci_cmd_handler_tab_p_get = 0x4004c920);
417+
PROVIDE(llm_le_env = 0x3ffb976c);
418+
PROVIDE(lm_default_state_tab_p_get = 0x40054268);
419+
PROVIDE(lm_env = 0x3ffb9860);
420+
PROVIDE(lm_hci_cmd_handler_tab_p_get = 0x4005425c);
421+
PROVIDE(MultiplyBigHexModP256 = 0x400160b8);
422+
PROVIDE(one_bits = 0x3ff971f8);
423+
PROVIDE(r_btdm_option_data = 0x3ffae6e0);
424+
PROVIDE(r_bt_util_buf_acl_rx_alloc = 0x40010218);
425+
PROVIDE(r_bt_util_buf_acl_rx_free = 0x40010234);
426+
PROVIDE(r_bt_util_buf_acl_tx_alloc = 0x40010268);
427+
PROVIDE(r_bt_util_buf_acl_tx_free = 0x40010280);
428+
PROVIDE(r_bt_util_buf_lmp_tx_alloc = 0x400101d0);
429+
PROVIDE(r_bt_util_buf_lmp_tx_free = 0x400101ec);
430+
PROVIDE(r_bt_util_buf_sync_clear = 0x400103c8);
431+
PROVIDE(r_bt_util_buf_sync_rx_alloc = 0x40010468);
432+
PROVIDE(r_bt_util_buf_sync_rx_free = 0x4001049c);
433+
PROVIDE(r_bt_util_buf_sync_tx_alloc = 0x400103ec);
434+
PROVIDE(r_bt_util_buf_sync_tx_free = 0x40010428);
435+
PROVIDE(lm_n192_mod_mul = 0x40011dc0);
436+
PROVIDE(lm_n192_mod_add = 0x40011e9c);
437+
PROVIDE(lm_n192_mod_sub = 0x40011eec);
438+
PROVIDE(ea_conflict_check = 0x40014e9c);
439+
PROVIDE(ea_prog_timer = 0x40014f88);
440+
PROVIDE(r_ea_offset_req = 0x40015748);
441+
PROVIDE(r_ea_time_get_halfslot_rounded = 0x40015894);
442+
PROVIDE(ecc_point_multiplication_uint8_256 = 0x40016804);
443+
PROVIDE(r_hci_look_for_cmd_desc = 0x40018454);
444+
PROVIDE(r_hci_look_for_dbg_evt_desc = 0x400184c4);
445+
PROVIDE(r_hci_send_2_host = 0x400185bc);
446+
PROVIDE(r_ke_event_schedule = 0x40019cdc);
447+
PROVIDE(r_ke_timer_clear = 0x4001ab90);
448+
PROVIDE(r_ke_timer_set = 0x4001aac0);
449+
PROVIDE(r_lb_init = 0x4001acd4);
450+
PROVIDE(r_lb_reset = 0x4001ad38);
451+
PROVIDE(r_lc_auth_cmp = 0x4001cd54);
452+
PROVIDE(r_lc_init = 0x4001c948);
453+
PROVIDE(r_lc_reset = 0x4001c99c);
454+
PROVIDE(r_lc_sco_host_accept = 0x40022118);
455+
PROVIDE(r_lc_start = 0x4001ca28);
456+
PROVIDE(lc_set_encap_pdu_data_p192 = 0x4002e4c8);
457+
PROVIDE(lc_set_encap_pdu_data_p256 = 0x4002e454);
458+
PROVIDE(lm_get_auth_method = 0x40023420);
459+
PROVIDE(lmp_accepted_ext_handler = 0x40027290);
460+
PROVIDE(lmp_clk_adj_handler = 0x40027468);
461+
PROVIDE(lmp_clk_adj_ack_handler = 0x400274f4);
462+
PROVIDE(lmp_clk_adj_req_handler = 0x4002751c);
463+
PROVIDE(lmp_feats_req_ext_handler = 0x4002ccb0);
464+
PROVIDE(lmp_pkt_type_tbl_req_handler = 0x40027574);
465+
PROVIDE(lmp_esco_link_req_handler = 0x40027610);
466+
PROVIDE(lmp_rmv_esco_link_req_handler = 0x400276e8);
467+
PROVIDE(lmp_ssr_req_handler = 0x4002780c);
468+
PROVIDE(lmp_ssr_res_handler = 0x40027900);
469+
PROVIDE(lmp_pause_enc_req_handler = 0x4002df90);
470+
PROVIDE(lmp_resume_enc_req_handler = 0x4002e084);
471+
PROVIDE(lmp_num_comparison_fail_handler = 0x40027a74);
472+
PROVIDE(lmp_passkey_fail_handler = 0x40027aec);
473+
PROVIDE(lmp_keypress_notif_handler = 0x4002c5c8);
474+
PROVIDE(lmp_pwr_ctrl_req_handler = 0x400263bc);
475+
PROVIDE(lmp_pwr_ctrl_res_handler = 0x40026480);
476+
PROVIDE(lmp_auto_rate_handler = 0x40026548);
477+
PROVIDE(lmp_pref_rate_handler = 0x4002657c);
478+
PROVIDE(lmp_name_req_handler = 0x40025050);
479+
PROVIDE(lmp_name_res_handler = 0x400250bc);
480+
PROVIDE(lmp_accepted_handler = 0x4002e894);
481+
PROVIDE(lmp_clk_off_req_handler = 0x40025a44);
482+
PROVIDE(lmp_clk_off_res_handler = 0x40025ab8);
483+
PROVIDE(lmp_detach_handler = 0x40025b74);
484+
PROVIDE(lmp_tempkey_handler = 0x4002b6b0);
485+
PROVIDE(lmp_temprand_handler = 0x4002b74c);
486+
PROVIDE(lmp_sres_handler = 0x4002b840);
487+
PROVIDE(lmp_aurand_handler = 0x4002bda0);
488+
PROVIDE(lmp_unitkey_handler = 0x4002c13c);
489+
PROVIDE(lmp_inrand_handler = 0x4002c414);
490+
PROVIDE(lmp_oob_fail_handler = 0x40027b84);
491+
PROVIDE(lmp_ping_req_handler = 0x40027c08);
492+
PROVIDE(lmp_ping_res_handler = 0x40027c5c);
493+
PROVIDE(lmp_stop_enc_req_handler = 0x4002de30);
494+
PROVIDE(lmp_incr_pwr_req_handler = 0x4002629c);
495+
PROVIDE(lmp_decr_pwr_req_handler = 0x400262f8);
496+
PROVIDE(lmp_max_pwr_handler = 0x40026354);
497+
PROVIDE(lmp_min_pwr_handler = 0x40026388);
498+
PROVIDE(lmp_ver_req_handler = 0x400265f0);
499+
PROVIDE(lmp_ver_res_handler = 0x40026670);
500+
PROVIDE(lmp_qos_handler = 0x40026790);
501+
PROVIDE(lmp_qos_req_handler = 0x40026844);
502+
PROVIDE(lmp_sco_link_req_handler = 0x40026930);
503+
PROVIDE(lmp_rmv_sco_link_req_handler = 0x40026a10);
504+
PROVIDE(lmp_max_slot_handler = 0x40026a54);
505+
PROVIDE(lmp_max_slot_req_handler = 0x40026aac);
506+
PROVIDE(lmp_timing_accu_req_handler = 0x40026b54);
507+
PROVIDE(lmp_timing_accu_res_handler = 0x40026bcc);
508+
PROVIDE(lmp_setup_cmp_handler = 0x40026c84);
509+
PROVIDE(lmp_feats_res_handler = 0x4002b548);
510+
PROVIDE(lmp_feats_req_handler = 0x4002b620);
511+
PROVIDE(lmp_host_con_req_handler = 0x4002b3d8);
512+
PROVIDE(lmp_use_semi_perm_key_handler = 0x4002b4c4);
513+
PROVIDE(lmp_slot_off_handler = 0x40026cc8);
514+
PROVIDE(lmp_page_mode_req_handler = 0x40026d0c);
515+
PROVIDE(lmp_page_scan_mode_req_handler = 0x40026d4c);
516+
PROVIDE(lmp_supv_to_handler = 0x40026d94);
517+
PROVIDE(lmp_test_activate_handler = 0x40026e7c);
518+
PROVIDE(lmp_test_ctrl_handler = 0x40026ee4);
519+
PROVIDE(lmp_enc_key_size_mask_req_handler = 0x40027038);
520+
PROVIDE(lmp_enc_key_size_mask_res_handler = 0x400270a4);
521+
PROVIDE(lmp_encaps_hdr_handler = 0x40027120);
522+
PROVIDE(lmp_sp_nb_handler = 0x4002acf0);
523+
PROVIDE(lmp_sp_cfm_handler = 0x4002b170);
524+
PROVIDE(lmp_dhkey_chk_handler = 0x4002ab48);
525+
PROVIDE(lmp_io_cap_res_handler = 0x4002c670);
526+
PROVIDE(lmp_io_cap_req_handler = 0x4002c7a4);
527+
PROVIDE(lc_cmd_cmp_bd_addr_send = 0x4002cec4);
528+
PROVIDE(ld_acl_tx_packet_type_select = 0x4002fb40);
529+
PROVIDE(ld_acl_sched = 0x40033268);
530+
PROVIDE(ld_acl_sniff_sched = 0x4003340c);
531+
PROVIDE(ld_acl_sniff_exit = 0x400312b4);
532+
PROVIDE(ld_sco_evt_canceled_cbk = 0x40031e18);
533+
PROVIDE(ld_acl_rx = 0x4003274c);
534+
PROVIDE(ld_acl_tx = 0x4002ffdc);
535+
PROVIDE(ld_acl_rx_sync = 0x4002fbec);
536+
PROVIDE(ld_acl_rx_sync2 = 0x4002fd8c);
537+
PROVIDE(ld_acl_rx_no_sync = 0x4002fe78);
538+
PROVIDE(ld_acl_clk_isr = 0x40030cf8);
539+
PROVIDE(ld_acl_rsw_frm_cbk = 0x40033bb0);
540+
PROVIDE(ld_sco_modify = 0x40031778);
541+
PROVIDE(lm_cmd_cmp_send = 0x40051838);
542+
PROVIDE(ld_sco_frm_cbk = 0x400349dc);
543+
PROVIDE(ld_sco_evt_start_cbk = 0x40031afc);
544+
PROVIDE(ld_sco_evt_stop_cbk = 0x40031d78);
545+
PROVIDE(ld_acl_rsw_evt_start_cbk = 0x40031154);
546+
PROVIDE(ld_acl_sco_rsvd_check = 0x4002fa94);
547+
PROVIDE(ld_acl_sniff_frm_cbk = 0x4003482c);
548+
PROVIDE(ld_inq_end = 0x4003ab48);
549+
PROVIDE(ld_inq_sched = 0x4003aba4);
550+
PROVIDE(ld_inq_frm_cbk = 0x4003ae4c);
551+
PROVIDE(ld_pscan_frm_cbk = 0x4003ebe4);
552+
PROVIDE(r_ld_acl_sniff = 0x4003617c);
553+
PROVIDE(ld_acl_frm_cbk = 0x40034414);
554+
PROVIDE(ld_acl_rsw_end = 0x40032bc0);
555+
PROVIDE(ld_acl_end = 0x40033140);
556+
PROVIDE(ld_acl_resched = 0x40033814);
557+
PROVIDE(ld_acl_test_mode_update = 0x40032050);
558+
PROVIDE(ld_csb_tx_sched = 0x40039c1c);
559+
PROVIDE(ld_csb_tx_evt_start_cbk = 0x40039d0c);
560+
PROVIDE(ld_csb_tx_evt_canceled_cbk = 0x40039ee4);
561+
PROVIDE(r_ld_init = 0x4003c294);
562+
PROVIDE(r_ld_page_start = 0x4003d848);
563+
PROVIDE(r_ld_reset = 0x4003c714);
564+
PROVIDE(r_ld_sched_sniff_add = 0x4003f9c4);
565+
PROVIDE(r_ld_sco_start = 0x40037110);
566+
PROVIDE(r_ld_sscan_start = 0x40040384);
567+
PROVIDE(r_llc_common_cmd_status_send = 0x40044ee0);
568+
PROVIDE(r_llc_init = 0x40044778);
569+
PROVIDE(r_llc_llcp_recv_handler = 0x40044678);
570+
PROVIDE(r_llc_reset = 0x400447b8);
571+
PROVIDE(r_llc_stop = 0x400449ac);
572+
PROVIDE(r_lld_adv_stop = 0x40048ea0);
573+
PROVIDE(r_lld_evt_init = 0x40046b3c);
574+
PROVIDE(r_lld_pdu_tx_flush = 0x4004b414);
575+
PROVIDE(r_lld_scan_stop = 0x40049190);
576+
PROVIDE(r_llm_init = 0x4004c9f8);
577+
PROVIDE(r_lm_init = 0x4004ed34);
578+
PROVIDE(nvds_null_read = 0x400542a0);
579+
PROVIDE(nvds_null_write = 0x400542a8);
580+
PROVIDE(nvds_null_erase = 0x400542b0);
581+
PROVIDE(nvds_read = 0x400542c4);
582+
PROVIDE(nvds_write = 0x400542fc);
583+
PROVIDE(nvds_erase = 0x40054334);
584+
PROVIDE(nvds_init_memory = 0x40054358);
585+
PROVIDE(r_rwip_prevent_sleep_set = 0x40055e64);
586+
PROVIDE(r_rwip_reset = 0x40055ab8);
587+
PROVIDE(r_rwip_schedule = 0x40055b38);
588+
PROVIDE(rwip_rf = 0x3ffbdb28);
589+
PROVIDE(SubtractBigHexMod256 = 0x40015e8c);
590+
PROVIDE(sw_to_hw = 0x3ffb8d40);
591+
PROVIDE(hci_le_rd_rem_used_feats_cmd_handler = 0x400417b4);
592+
PROVIDE(hci_per_inq_mode_cmd_handler = 0x400519b0);
593+
PROVIDE(llcp_length_req_handler = 0x40043808);
594+
PROVIDE(llcp_unknown_rsp_handler = 0x40043ba8);
595+
PROVIDE(llcp_channel_map_req_handler = 0x4004291c);
596+
PROVIDE(llcp_con_up_req_handler = 0x400426f0);
597+
PROVIDE(ets_update_cpu_frequency_rom = 0x40008550);
598+
PROVIDE(hci_tl_env = 0x3ffb8154);
599+
PROVIDE(ld_acl_env = 0x3ffb8258);
600+
PROVIDE(ea_env = 0x3ffb80ec);
601+
PROVIDE(lc_sco_data_path_config = 0x3ffb81f8);
602+
PROVIDE(lc_sco_env = 0x3ffb81fc);
603+
PROVIDE(ld_csb_tx_env = 0x3ffb827c);
604+
PROVIDE(ld_fm_env = 0x3ffb8284);
605+
PROVIDE(ld_inq_env = 0x3ffb82e4);
606+
PROVIDE(ld_page_env = 0x3ffb82f0);
607+
PROVIDE(ld_pscan_env = 0x3ffb8308);
608+
PROVIDE(ld_sched_env = 0x3ffb830c);
609+
PROVIDE(ld_sco_env = 0x3ffb824c);
610+
PROVIDE(LM_Sniff = 0x3ffb8230);
611+
PROVIDE(LM_SniffSubRate = 0x3ffb8214);
612+
PROVIDE(nvds_env = 0x3ffb8364);
613+
PROVIDE(nvds_magic_number = 0x3ff9912a);
614+
PROVIDE(TASK_DESC_LLD = 0x3ff98b58);
615+
PROVIDE(ld_acl_evt_canceled_cbk = 0x40033944);
616+
PROVIDE(ld_acl_rsw_evt_canceled_cbk = 0x40033364);
617+
PROVIDE(ld_acl_evt_stop_cbk = 0x40033870);
618+
PROVIDE(ld_acl_evt_start_cbk = 0x40030ab0);
619+
PROVIDE(ld_acl_sniff_evt_start_cbk = 0x40031360);
620+
PROVIDE(lc_acl_disc_ind_handler = 0x4002f270);
621+
PROVIDE(lc_pca_sscan_start_req_handler = 0x40029b34);
622+
PROVIDE(ld_acl_sniff_trans_sched = 0x40033734);
623+
PROVIDE(lc_pwr_decr_ind_handler = 0x4002859c);
624+
PROVIDE(lc_pwr_incr_ind_handler = 0x400284a8);
625+
PROVIDE(lc_setup_sync_param_check = 0x4002354c);
626+
PROVIDE(lc_lmp_rsp_to_flow_spec_handler = 0x400297f0);
627+
PROVIDE(lc_pca_sscan_clk_ind_handler = 0x4002a38c);
628+
PROVIDE(lc_op_loc_unsniff_req_handler = 0x40028be0);
629+
PROVIDE(lc_op_loc_sniff_req_handler = 0x40028ccc);
630+
PROVIDE(lc_op_loc_switch_req_handler = 0x40028df4);
631+
PROVIDE(lc_op_loc_sync_con_req_handler = 0x40028f6c);
632+
PROVIDE(lm_sync_conf = 0x3ffb8348);
633+
PROVIDE(lm_nb_sync_active = 0x3ffb8346);
634+
PROVIDE(lm_sync_nego = 0x3ffb8345);
635+
PROVIDE(lm_nego_cnt = 0x3ffb8344);
636+
PROVIDE(lm_nego_cntl = 0x3ffb8342);
637+
PROVIDE(lm_nego_max_cnt = 0x3ffb8343);
638+
PROVIDE(lm_nego_pkt_used = 0x3ffb8340);
639+
640+
/* The Bluetooth controller startup code in libbtdm_app.a refers to the start of
641+
* the BSS. TinyGo calls this symbol _sbss.
642+
*/
643+
PROVIDE(_bss_start = _sbss);

0 commit comments

Comments
 (0)