T4.1 Data Access Violation Crash

Status
Not open for further replies.

vjmuzik

Well-known member
I'm currently working on rebuilding NativeEthernet from scratch so that it's fully non-blocking for better performance, while working on the TCP Server code I'm running into an annoying crash I can't figure out. The only thing consistent is the type of crash that is reported, Data Access Violation, though I can't be sure why it's happening.

The new library is a little bit more complex in that you don't have to manually poll the server for connected clients or keep track of them yourself. All of the connected clients and their socket buffers are allocated from FNET's heap memory and linked by a pointer list to the server, I've kept careful track of what's allocated and deallocated to make sure it's not running out of memory and FNET has functions to check it's memory so I know that whenever this crash happens the memory is not full. It also doesn't have to do with any cache memory because it happens no matter where I allocate FNET's stack(DTCM, DMAMEM, or EXTMEM) and it doesn't take any longer to happen when I give it more memory.

I use Apache Benchmark to stress test the Server and the crash will happen after a random number of clients each time, sometimes less than 2,000 clients, sometimes not until over 20,000 connections have been made.


This CrashReport comes from this code: "if (client_list->object)"
Code:
CrashReport:
  A problem occurred at (system time) 18:57:44
  Code was executing from address 0x992
  CFSR: 82
	(DACCVIOL) Data Access Violation
	(MMARVALID) Accessed Address: 0xDF08C8F7          //The accessed address always changes between crashes
  Temperature inside the chip was 59.68 °C
  Startup CPU clock speed is 600MHz
  Reboot was caused by auto reboot after fault or bad interrupt detected

This CrashReport comes from this code: "switch (tcp_ptr->tcp_state)"
Code:
CrashReport:
  A problem occurred at (system time) 19:0:1
  Code was executing from address 0x5F4
  CFSR: 82
	(DACCVIOL) Data Access Violation
	(MMARVALID) Accessed Address: 0xF43F0F60          //The accessed address always changes between crashes
  Temperature inside the chip was 59.68 °C
  Startup CPU clock speed is 600MHz
  Reboot was caused by auto reboot after fault or bad interrupt detected

I'll try to explain the short pieces or code to understand more what's happening in them and after.
client_list is the pointer list of connected clients, object is a pointer that points to a specific clients object.
After passing the if check the object is then passed to a function that will give it the name tcp_ptr, tcp_state is just a normal uint32_t.

So object and tcp_ptr should reference the same object when it gets passed to the function, object is assigned in the Client class constructor and then added to the list if the Client was successfully created, everything in the list has a valid address before even being added because all the pointers and mallocs have been checked before the Client was made with placement new. I also know there is nothing wrong with the way Clients are added and removed to the pointer list since it's just a copy of what FNET uses to allocate it's own pointer lists used throughout the whole library.

Does anyone have any insight on how these pointers could be pointing to wrong addresses despite there being numerous checks in place and the fact that it happens in 1 out of thousands of iterations of the same code?
 
> 1 out of thousands of iterations of the same code?

Could be a race condition.

You need a debugger. Is TeensyDebug good enough?
 
I’ve never used it before so I don’t know what it’s capable of, my knowledge of debugging only includes the serial monitor.
 
looks like tcp_ptr is somehow wrong, sometimes.

That's the confusing part, it gets past multiple null pointer checks after allocating the socket memory and the client object, none of them fail and the pointers are set to null when created so it's not like the client failed to create and there are wild pointers left. Not to mention that all of them are being created equally through the exact same code yet they don't all crash like this.
 
Perhaps it gets overwritten by a buffer overflow (array index out of bounds) I'd take a look at the mapfile and look for arrays that are near.
 
I wouldn't rule it out, but the current code doesn't have any arrays near it or anything that should overflow as far as I can tell.

I'm not really sure what I should be looking for in the map file.

Here's more of the relevant code.

Here's where the Clients are made and added to the list:
Code:
              uint8_t* new_client_memory = (uint8_t*) _fnet_malloc_netbuf(sizeof(EthernetClient));
              if(!new_client_memory){
                while(1){
                  Serial.println("Failed to allocate client!");
                  delay(1000);
                }
              }
              EthernetClient* new_client = new (new_client_memory) EthernetClient(accepted_socket);
              new_client->client_memory = new_client_memory;
              new_client->init(server_ptr->socket_recv_size, server_ptr->socket_send_size);
              object_queue_add(&server_ptr->client_list, &(new_client->client_id));

Here's where the list is looped through and processed:
Code:
      object_chain_t *client_list = NULL;
      EthernetClient *client = NULL;
      
      client_list = server_ptr->client_list;
      
      if(client_list == 0)
      {
//        Serial.println("Client List empty!");
      }
      else
      {
//        Serial.println("Handle Client chain!");
        client = (EthernetClient*) client_list->object;
        client->tcp_client_poll(client);
        if(client->tcp_state == EthernetClient::TCP_STATE_DISABLED){
          //Deallocate Clients
          object_queue_del(&server_ptr->client_list, &(client->client_id));
          client->~EthernetClient();
          if(client->client_memory){
            _fnet_free_netbuf(client->client_memory);
          }
          fnet_socket_listen(server_ptr->tcp_socket, ++server_ptr->backlog);
        }
        
        while(client_list->next_chain)
        {
          client_list = client_list->next_chain;
[COLOR="#FF0000"]          if(client_list->object){                                                      //Here's where the crash happens sometimes[/COLOR]
            client = (EthernetClient*) client_list->object;
            client->tcp_client_poll(client);
            if(client->tcp_state == EthernetClient::TCP_STATE_DISABLED){
              //Deallocate Clients
              object_queue_del(&server_ptr->client_list, &(client->client_id));
              client->~EthernetClient();
              if(client->client_memory){
                _fnet_free_netbuf(client->client_memory);
              }
              fnet_socket_listen(server_ptr->tcp_socket, ++server_ptr->backlog);
            }
          }
          else{
            object_queue_del(&server_ptr->client_list, client_list);
          }
        }
//        Serial.println("Handle Client chain done!");
      }

Here's the beginning of the client process function:
Code:
void EthernetClient::tcp_client_poll(EthernetClient *client){
  if(client == NULL) return;

  EthernetClient* tcp_ptr = client;
  
[COLOR="#FF0000"]  switch (tcp_ptr->tcp_state) {                                                    //Here's where the crash happens sometimes[/COLOR]
 
The ordering of variables in memory is pretty random. The problematic code (if there is any) does not need to be in the near of the switch.. it can be anywhere.
Can you post the *.sym file? Its in the temp directory where Arduino builds the hex file.
 
Here you go.
Code:
/var/folders/6c/mywk2cdx4k919xpqt544vnbh0000gq/T/arduino_build_302604/WebServerNonBlocking.ino.elf:     file format elf32-littlearm

SYMBOL TABLE:
60000000 l    d  .text.headers	00000000 .text.headers
60001400 l    d  .text.code	00000000 .text.code
600027e4 l    d  .text.progmem	00000000 .text.progmem
00000000 l    d  .text.itcm	00000000 .text.itcm
0000f420 l    d  .fini	00000000 .fini
0000f424 l    d  .ARM.exidx	00000000 .ARM.exidx
20000000 l    d  .data	00000000 .data
20002618 l    d  NonCacheable	00000000 NonCacheable
2000ef38 l    d  .bss	00000000 .bss
20200000 l    d  .bss.dma	00000000 .bss.dma
70000000 l    d  .bss.extram	00000000 .bss.extram
60020c28 l    d  .text.csf	00000000 .text.csf
00000000 l    d  .ARM.attributes	00000000 .ARM.attributes
00000000 l    d  .comment	00000000 .comment
00000000 l    d  .debug_info	00000000 .debug_info
00000000 l    d  .debug_abbrev	00000000 .debug_abbrev
00000000 l    d  .debug_line	00000000 .debug_line
00000000 l    d  .debug_frame	00000000 .debug_frame
00000000 l    d  .debug_str	00000000 .debug_str
00000000 l    d  .debug_loc	00000000 .debug_loc
00000000 l    d  .debug_aranges	00000000 .debug_aranges
00000000 l    d  .debug_ranges	00000000 .debug_ranges
00000000 l    df *ABS*	00000000 bootdata.c
00000000 l    df *ABS*	00000000 startup.c
00000000 l    df *ABS*	00000000 T4_PowerButton.cpp
20050844 l     O .bss	00000004 __user_power_button_callback
00000000 l    df *ABS*	00000000 tempmon.c
20050858 l     O .bss	00000004 s_hotTemp
2005085c l     O .bss	00000004 s_hot_ROOM
20050860 l     O .bss	00000004 s_roomC_hotC
20050864 l     O .bss	00000004 s_hotCount
00000000 l    df *ABS*	00000000 usb.c
00009594 l     F .text.itcm	00000070 schedule_transfer
00009604 l     F .text.itcm	00000036 run_callbacks
0000963c l     F .text.itcm	000000a0 endpoint0_transmit.constprop.1
2005086c l     O .bss	00000004 endpointN_notify_mask
20050870 l     O .bss	00000001 sof_usage
2005087c l     O .bss	00000004 endpoint0_notify_mask
20050880 l     O .bss	00000001 usb_reboot_timer
20050888 l     O .bss	00000008 endpoint0_setupdata
20050890 l     O .bss	00000008 reply_buffer
20050898 l     O .bss	00000008 endpoint0_buffer
00000000 l    df *ABS*	00000000 CrashReport.cpp
60002094 l     F .text.code	00000044 cleardata(arm_fault_info_struct*) [clone .constprop.1]
600020d8 l     F .text.code	00000044 isvalid(arm_fault_info_struct const*) [clone .part.0] [clone .constprop.2]
00000000 l    df *ABS*	00000000 analog.c
20050e11 l     O .bss	00000001 calibrating
00000000 l    df *ABS*	00000000 /Applications/Teensyduino1.54.app/Contents/Java/hardware/tools/arm/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/fpv5-d16/crti.o
00000000 l    df *ABS*	00000000 /Applications/Teensyduino1.54.app/Contents/Java/hardware/tools/arm/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/fpv5-d16/crtn.o
00000000 l    df *ABS*	00000000 crtstuff.c
00000020 l     F .text.itcm	00000000 __do_global_dtors_aux
2000ef38 l       .bss	00000000 completed.8605
00000044 l     F .text.itcm	00000000 frame_dummy
2000ef3c l       .bss	00000000 object.8610
600027b0 l     O .text.code	00000000 __frame_dummy_init_array_entry
00000000 l    df *ABS*	00000000 WebServerNonBlocking.ino.cpp
000004bc l     F .text.itcm	00000068 _GLOBAL__sub_I_testSocket1
2000efb8 l     O .bss	00000200 setup::tcp_buf1
2000f1bc l     O .bss	00040000 setup::stack_mem
00000000 l    df *ABS*	00000000 NativeDns.cpp
000005c8 l     F .text.itcm	00000020 _GLOBAL__sub_I__ZN9DNSClient11nullAddressE
2004f1c4 l     O .bss	00000008 INADDR_NONE
00000000 l    df *ABS*	00000000 NativeEthernetThreads.cpp
00001158 l     F .text.itcm	00000018 _GLOBAL__sub_I__ZN13EthernetClass10_fnet_pollE
20000250 l     O .data	00000008 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::timer_api
2004f1d8 l     O .bss	00000006 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::teensy_mac
2000046c l     O .data	00000010 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)::teensy_mutex_api
2004f1e4 l     O .bss	00000010 EthernetClass::startDHCP(void (*)(), void (*)(), unsigned long, unsigned char)::dhcp_params
00000000 l    df *ABS*	00000000 HardwareSerial1.cpp
0000a70c l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial1
20050a94 l     O .bss	00000040 tx_buffer1
200010a8 l     O .data	00000064 UART6_Hardware
20050ad4 l     O .bss	00000040 rx_buffer1
00000000 l    df *ABS*	00000000 HardwareSerial2.cpp
0000a730 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial2
20050b14 l     O .bss	00000028 tx_buffer2
200016f8 l     O .data	00000064 UART4_Hardware
20050b3c l     O .bss	00000040 rx_buffer2
00000000 l    df *ABS*	00000000 HardwareSerial3.cpp
0000a754 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial3
20050b7c l     O .bss	00000028 tx_buffer3
2000181c l     O .data	00000064 UART2_Hardware
20050ba4 l     O .bss	00000040 rx_buffer3
00000000 l    df *ABS*	00000000 HardwareSerial4.cpp
0000a778 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial4
20001880 l     O .data	00000064 UART3_Hardware
20050be4 l     O .bss	00000028 tx_buffer4
20050c0c l     O .bss	00000040 rx_buffer4
00000000 l    df *ABS*	00000000 HardwareSerial5.cpp
0000a79c l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial5
20050c4c l     O .bss	00000028 tx_buffer5
20001944 l     O .data	00000064 UART8_Hardware
20050c74 l     O .bss	00000040 rx_buffer5
00000000 l    df *ABS*	00000000 HardwareSerial6.cpp
0000a7c0 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial6
20050cb4 l     O .bss	00000028 tx_buffer6
20001a08 l     O .data	00000064 UART1_Hardware
20050cdc l     O .bss	00000040 rx_buffer6
00000000 l    df *ABS*	00000000 HardwareSerial7.cpp
0000a7e4 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial7
20001acc l     O .data	00000064 UART7_Hardware
20050d1c l     O .bss	00000028 tx_buffer7
20050d44 l     O .bss	00000040 rx_buffer7
00000000 l    df *ABS*	00000000 HardwareSerial8.cpp
0000a808 l     F .text.itcm	00000018 _GLOBAL__sub_I_IRQHandler_Serial8
20050d84 l     O .bss	00000028 tx_buffer8
20001b90 l     O .data	00000064 UART5_Hardware
20050dac l     O .bss	00000040 rx_buffer8
00000000 l    df *ABS*	00000000 usb_inst.cpp
0000abac l     F .text.itcm	00000018 _GLOBAL__sub_I_Serial
00000000 l    df *ABS*	00000000 usb_desc.c
600028b0 l     O .text.progmem	0000000a qualifier_descriptor
20001668 l     O .data	00000012 device_descriptor
00000000 l    df *ABS*	00000000 serialEvent1.cpp
00000000 l    df *ABS*	00000000 serialEvent2.cpp
00000000 l    df *ABS*	00000000 serialEvent3.cpp
00000000 l    df *ABS*	00000000 serialEvent4.cpp
00000000 l    df *ABS*	00000000 serialEvent5.cpp
00000000 l    df *ABS*	00000000 serialEvent6.cpp
00000000 l    df *ABS*	00000000 serialEvent7.cpp
00000000 l    df *ABS*	00000000 serialEvent8.cpp
00000000 l    df *ABS*	00000000 serialEvent.cpp
00000000 l    df *ABS*	00000000 NativeEthernetClient.cpp
00000000 l    df *ABS*	00000000 NativeEthernetServer.cpp
00000000 l    df *ABS*	00000000 object_chain.c
00000000 l    df *ABS*	00000000 fnet_cpu.c
00000000 l    df *ABS*	00000000 fnet_mimxrt_eth.c
000011b8 l     F .text.itcm	00000004 fnet_mimxrt_eth_phy_init
000011bc l     F .text.itcm	00000180 fnet_mimxrt_eth_init
20001410 l     O .data	0000011c fnet_mimxrt_eth0_if
00000000 l    df *ABS*	00000000 fnet_mimxrt_isr.c
00000000 l    df *ABS*	00000000 fnet_mimxrt_isr_inst.c
00000000 l    df *ABS*	00000000 fnet_fec.c
000013c8 l     F .text.itcm	00000042 _fnet_fec_get_hw_addr
0000140c l     F .text.itcm	00000026 _fnet_fec_get_statistics
00001434 l     F .text.itcm	0000001e fnet_fec_isr_handler_top
00001454 l     F .text.itcm	00000064 _fnet_fec_phy_read
000014b8 l     F .text.itcm	00000064 _fnet_fec_phy_write
0000151c l     F .text.itcm	00000080 _fnet_fec_set_hw_addr
0000159c l     F .text.itcm	00000028 _fnet_fec_release
000015c4 l     F .text.itcm	000001b4 _fnet_fec_init
00001814 l     F .text.itcm	00000026 fnet_fec_isr_handler_bottom
00001778 l     F .text.itcm	0000009a _fnet_fec_input
00000000 l    df *ABS*	00000000 fnet_service.c
2004f1f8 l     O .bss	00000300 fnet_poll_if
2004f4f8 l     O .bss	00000004 fnet_service_mutex
00000000 l    df *ABS*	00000000 fnet_dhcp.c
00000000 l    df *ABS*	00000000 fnet_dhcp_cln.c
00001b38 l     F .text.itcm	000001c6 _fnet_dhcp_cln_parse_options
00001d00 l     F .text.itcm	000000e8 _fnet_dhcp_cln_receive_message
00001de8 l     F .text.itcm	00000218 _fnet_dhcp_cln_send_message
00002000 l     F .text.itcm	0000011e _fnet_dhcp_cln_set_state
00002120 l     F .text.itcm	00000056 _fnet_dhcp_cln_apply_params
00002178 l     F .text.itcm	00000018 fnet_dhcp_cln_release.part.1
00002190 l     F .text.itcm	00000204 _fnet_dhcp_cln_poll
200015bc l     O .data	00000006 fnet_dhcp_cln_parameter_request_list
2004f4fc l     O .bss	000002cc fnet_dhcp_cln_if_list
00000000 l    df *ABS*	00000000 fnet_link.c
00002530 l     F .text.itcm	00000022 _fnet_link_poll
2004f7c8 l     O .bss	00000018 fnet_link_if_list
00000000 l    df *ABS*	00000000 fnet_arp.c
000025ac l     F .text.itcm	00000004 _fnet_arp_ip4_addr_conflict
000025b0 l     F .text.itcm	00000044 _fnet_arp_timer
000025f4 l     F .text.itcm	000000ce _fnet_arp_add_entry.isra.0
00000000 l    df *ABS*	00000000 fnet_checksum.c
00002a8c l     F .text.itcm	000000e8 _fnet_checksum32_low
00002b74 l     F .text.itcm	0000005c _fnet_checksum32_nb
00000000 l    df *ABS*	00000000 fnet_diginet.c
2004f7e0 l     O .bss	00000008 diginet_queue
2004f7ec l     O .bss	00000004 diginet_event
00000000 l    df *ABS*	00000000 fnet_error.c
2004f7f0 l     O .bss	00000001 FNET_ERR_NUMBER
00000000 l    df *ABS*	00000000 fnet_eth.c
2004f7f4 l     O .bss	00000004 fnet_eth_number
00000000 l    df *ABS*	00000000 fnet_icmp4.c
000030f0 l     F .text.itcm	0000005e _fnet_icmp4_output
00003150 l     F .text.itcm	0000008a _fnet_icmp4_notify_protocol
000031dc l     F .text.itcm	00000120 _fnet_icmp4_input
00000000 l    df *ABS*	00000000 fnet_ip.c
00000000 l    df *ABS*	00000000 fnet_ip4.c
00003514 l     F .text.itcm	00000060 _fnet_ip4_frag_list_free.part.1
00003574 l     F .text.itcm	00000038 _fnet_ip4_timer
000037fc l     F .text.itcm	00000482 _fnet_ip4_input_low
00003c80 l     F .text.itcm	00000074 _fnet_ip4_netif_output
2004f7f8 l     O .bss	00000002 ip_id.9939
2004f7fc l     O .bss	00000008 ip_queue
2004f804 l     O .bss	00000004 ip_timer_ptr
2004f808 l     O .bss	00000004 ip_frag_list_head
2004f80c l     O .bss	00000004 ip_event
00000000 l    df *ABS*	00000000 fnet_isr.c
2004f810 l     O .bss	00000004 fnet_locked
2004f814 l     O .bss	00000004 fnet_isr_table
200015e8 l     O .data	00000004 fnet_event_desc_last
00000000 l    df *ABS*	00000000 fnet_mempool.c
00000000 l    df *ABS*	00000000 fnet_netbuf.c
000045e8 l     F .text.itcm	000000b2 _fnet_netbuf_trim.part.0
2004f818 l     O .bss	00000004 fnet_mempool_main
00000000 l    df *ABS*	00000000 fnet_netif.c
2004f81c l     O .bss	00000004 fnet_netif_callback_ip4_addr_conflict
00000000 l    df *ABS*	00000000 fnet_prot.c
200004d0 l     O .data	00000010 fnet_prot_if_list
00000000 l    df *ABS*	00000000 fnet_raw.c
000051bc l     F .text.itcm	00000018 _fnet_raw_attach
000051d4 l     F .text.itcm	00000030 _fnet_raw_shutdown
00005204 l     F .text.itcm	000000f6 _fnet_raw_snd
000052fc l     F .text.itcm	00000062 _fnet_raw_rcv
00005360 l     F .text.itcm	00000034 _fnet_raw_connect
00005394 l     F .text.itcm	0000001c _fnet_raw_detach
000053b0 l     F .text.itcm	0000001c _fnet_raw_release
200004e0 l     O .data	0000002c fnet_raw_socket_api
00000000 l    df *ABS*	00000000 fnet_socket.c
00005554 l     F .text.itcm	00000044 _fnet_socket_desc_alloc
00005598 l     F .text.itcm	00000024 fnet_socket_addr_are_equal.part.1
000055bc l     F .text.itcm	00000014 _fnet_socket_addr_copy.part.3
20001610 l     O .data	00000002 fnet_port_last
2004f820 l     O .bss	00001000 fnet_socket_desc
00000000 l    df *ABS*	00000000 fnet_stack.c
20050820 l     O .bss	00000004 _fnet_mutex_api
20050828 l     O .bss	00000004 fnet_stack_mutex
00000000 l    df *ABS*	00000000 fnet_stdlib.c
2005082c l     O .bss	00000004 fnet_rand_seed
00000000 l    df *ABS*	00000000 fnet_tcp.c
0000664c l     F .text.itcm	00000058 _fnet_tcp_set_synopt
000066a4 l     F .text.itcm	00000080 _fnet_tcp_init_connection
00006724 l     F .text.itcm	00000028 _fnet_tcp_del_cb
0000674c l     F .text.itcm	00000080 _fnet_tcp_getsockopt
000067cc l     F .text.itcm	00000034 _fnet_tcp_accept
00006800 l     F .text.itcm	0000005c _fnet_tcp_attach
0000685c l     F .text.itcm	000000e0 _fnet_tcp_find_socket
0000693c l     F .text.itcm	0000005a _fnet_tcp_process_fin.isra.0
00006998 l     F .text.itcm	00000090 _fnet_tcp_get_opt.isra.4
00006a28 l     F .text.itcm	00000090 _fnet_tcp_close_socket
00006ab8 l     F .text.itcm	000000a2 _fnet_tcp_setsockopt
00006b5c l     F .text.itcm	00000078 _fnet_tcp_control_input
00006bd4 l     F .text.itcm	00000068 _fnet_tcp_init
00007188 l     F .text.itcm	00000034 _fnet_tcp_fasttimo
0000873c l     F .text.itcm	0000005c _fnet_tcp_slowtimo
00006c3c l     F .text.itcm	0000019c _fnet_tcp_send_seg.constprop.13
00006dd8 l     F .text.itcm	0000015e _fnet_tcp_send_dataseg.constprop.12
00006f38 l     F .text.itcm	0000009a _fnet_tcp_send_rst.isra.5
00006fd4 l     F .text.itcm	0000012a _fnet_tcp_send_headseg
00007100 l     F .text.itcm	00000070 _fnet_tcp_send_ack
00007170 l     F .text.itcm	00000018 _fnet_tcp_fasttimosk
000071bc l     F .text.itcm	000000be _fnet_tcp_rcv
0000727c l     F .text.itcm	00000150 _fnet_tcp_send_anydata
000073cc l     F .text.itcm	00000062 _fnet_tcp_shutdown
00007430 l     F .text.itcm	0000050e _fnet_tcp_dataprocess
00007940 l     F .text.itcm	00000164 _fnet_tcp_snd
00007aa4 l     F .text.itcm	000000b8 _fnet_tcp_connect
00007b5c l     F .text.itcm	000006e0 _fnet_tcp_input
0000823c l     F .text.itcm	0000007a _fnet_tcp_send_rstsk
000082b8 l     F .text.itcm	00000048 _fnet_tcp_abort_socket
00008300 l     F .text.itcm	0000005c _fnet_tcp_listen
0000835c l     F .text.itcm	00000060 _fnet_tcp_drain
000083bc l     F .text.itcm	000000d8 _fnet_tcp_close
00008494 l     F .text.itcm	000002a6 _fnet_tcp_slowtimosk
00008798 l     F .text.itcm	00000050 _fnet_tcp_release
20050830 l     O .bss	00000004 fnet_tcp_fasttimer
2000050c l     O .data	0000002c fnet_tcp_socket_api
20050834 l     O .bss	00000004 _fnet_tcp_initial_seq_number
20050838 l     O .bss	00000004 fnet_tcp_slowtimer
00000000 l    df *ABS*	00000000 fnet_timer.c
20050840 l     O .bss	00000004 _fnet_timer_head
00000000 l    df *ABS*	00000000 fnet_udp.c
000088fc l     F .text.itcm	00000026 _fnet_udp_attach
00008924 l     F .text.itcm	00000030 _fnet_udp_shutdown
00008954 l     F .text.itcm	00000196 _fnet_udp_snd
00008aec l     F .text.itcm	00000060 _fnet_udp_rcv
00008b4c l     F .text.itcm	0000002a _fnet_udp_connect
00008b78 l     F .text.itcm	0000001c _fnet_udp_detach
00008b94 l     F .text.itcm	0000001c _fnet_udp_release
00008bb0 l     F .text.itcm	000001e4 _fnet_udp_input
00008d94 l     F .text.itcm	00000094 _fnet_udp_control_input
20000538 l     O .data	0000002c fnet_udp_socket_api
00000000 l    df *ABS*	00000000 memcpy-armv7m.S.o
00000000 l    df *ABS*	00000000 clockspeed.c
00000000 l    df *ABS*	00000000 delay.c
00000000 l    df *ABS*	00000000 usb_serial.c
00009eec l     F .text.itcm	0000006c rx_queue_transfer
00009f58 l     F .text.itcm	000000b4 rx_event
0000a00c l     F .text.itcm	00000098 usb_serial_flush_callback
0000a0a4 l     F .text.itcm	0000017c usb_serial_write.part.1
200508a4 l     O .bss	00000010 rx_index
200508b4 l     O .bss	00000002 tx_packet_size
200508b6 l     O .bss	00000001 tx_noautoflush
200508b7 l     O .bss	00000001 tx_head
200508c0 l     O .bss	00000100 rx_transfer
200509c0 l     O .bss	00000001 rx_tail
200509c4 l     O .bss	00000009 rx_list
200509ce l     O .bss	00000002 rx_packet_size
20200060 l     O .bss.dma	00001000 rx_buffer
20201060 l     O .bss.dma	00002000 txbuffer
200509d0 l     O .bss	00000010 rx_count
200509e0 l     O .bss	00000004 rx_available
200509e4 l     O .bss	00000001 rx_head
200509e5 l     O .bss	00000001 transmit_previous_timeout
200509e6 l     O .bss	00000002 tx_available
20050a00 l     O .bss	00000080 tx_transfer
00000000 l    df *ABS*	00000000 EventResponder.cpp
00000000 l    df *ABS*	00000000 IPAddress.cpp
00000000 l    df *ABS*	00000000 IntervalTimer.cpp
20050e00 l     O .bss	00000010 funct_table
00000000 l    df *ABS*	00000000 Print.cpp
00000000 l    df *ABS*	00000000 main.cpp
00000000 l    df *ABS*	00000000 new.cpp
00000000 l    df *ABS*	00000000 yield.cpp
20050e10 l     O .bss	00000001 yield::running
00000000 l    df *ABS*	00000000 nonstd.c
00000000 l    df *ABS*	00000000 pwm.c
00000000 l    df *ABS*	00000000 rtc.c
00000000 l    df *ABS*	00000000 sm_pool.c
00000000 l    df *ABS*	00000000 HardwareSerial.cpp
00000000 l    df *ABS*	00000000 atexit_arm.cc
00000000 l    df *ABS*	00000000 _aeabi_uldivmod.o
00000000 l    df *ABS*	00000000 libgcc2.c
00000000 l    df *ABS*	00000000 _dvmd_tls.o
00000000 l    df *ABS*	00000000 mallocr.c
00000000 l    df *ABS*	00000000 cxa_atexit.c
00000000 l    df *ABS*	00000000 errno.c
00000000 l    df *ABS*	00000000 init.c
00000000 l    df *ABS*	00000000 malloc.c
00000000 l    df *ABS*	00000000 mallocr.c
00000000 l    df *ABS*	00000000 mbtowc_r.c
00000000 l    df *ABS*	00000000 memmove.c
00000000 l    df *ABS*	00000000 memset.c
00000000 l    df *ABS*	00000000 mlock.c
00000000 l    df *ABS*	00000000 mallocr.c
00000000 l    df *ABS*	00000000 sbrkr.c
00000000 l    df *ABS*	00000000 lib_a-strlen.o
00000000 l    df *ABS*	00000000 vfprintf.c
20001194 l     O .data	00000010 zeroes.7258
200011e0 l     O .data	00000010 blanks.7257
00000000 l    df *ABS*	00000000 vdprintf.c
00000000 l    df *ABS*	00000000 wctomb_r.c
00000000 l    df *ABS*	00000000 writer.c
00000000 l    df *ABS*	00000000 __atexit.c
00000000 l    df *ABS*	00000000 dtoa.c
0000dba0 l     F .text.itcm	00000128 quorem
00000000 l    df *ABS*	00000000 mallocr.c
00000000 l    df *ABS*	00000000 localeconv.c
00000000 l    df *ABS*	00000000 lib_a-memchr.o
00000000 l    df *ABS*	00000000 mprec.c
200013f8 l     O .data	0000000c p05.6087
00000000 l    df *ABS*	00000000 vfprintf.c
00000000 l    df *ABS*	00000000 vasnprintf.c
00000000 l    df *ABS*	00000000 impure.c
20001c70 l     O .data	00000428 impure_data
00000000 l    df *ABS*	00000000 locale.c
00000000 l    df *ABS*	00000000 ctype_.c
00000000 l    df *ABS*	00000000 reent.c
00000000 l    df *ABS*	00000000 
00000000 l       *UND*	00000000 __fini_array_end
00000000 l       *UND*	00000000 __bss_start__
00000000 l       *UND*	00000000 __bss_end__
00000000 l       *UND*	00000000 software_init_hook
00000000 l       *UND*	00000000 __fini_array_start
00000000 l       *UND*	00000000 hardware_init_hook
00000000 l       *UND*	00000000 __libc_fini
00000000 l       *UND*	00000000 __stack
0000f408 l     F .text.itcm	00000008 ___init_veneer
0000f410 l     F .text.itcm	00000008 ___Z11flexRamInfov_veneer
0000f418 l     F .text.itcm	00000008 ___ZNK16CrashReportClass7printToER5Print_veneer
60002710 l     F .text.code	00000008 ___ZN5Print5writeEPKc_veneer
60002718 l     F .text.code	00000008 __usb_serial_write_veneer
60002720 l     F .text.code	00000008 ____libc_init_array_veneer
60002728 l     F .text.code	00000008 __usb_init_serialnumber_veneer
60002730 l     F .text.code	00000008 __main_veneer
60002738 l     F .text.code	00000008 ___ZN5Print7printlnEmi_veneer
60002740 l     F .text.code	00000008 __set_arm_clock_veneer
60002748 l     F .text.code	00000008 ___ZN5Print6printfEPKcz_veneer
60002750 l     F .text.code	00000008 __pwm_init_veneer
60002758 l     F .text.code	00000008 __memset_veneer
60002760 l     F .text.code	00000008 __sm_set_pool_veneer
60002768 l     F .text.code	00000008 __delay_veneer
60002770 l     F .text.code	00000008 ___ZN5Print11printNumberEmhh_veneer
60002778 l     F .text.code	00000008 __free_veneer
60002780 l     F .text.code	00000008 __malloc_veneer
60002788 l     F .text.code	00000008 __startup_late_hook_veneer
60002790 l     F .text.code	00000008 ___ZN5Print7printlnEv_veneer
60002798 l     F .text.code	00000008 ___ZN5Print10printFloatEdh_veneer
600027a0 l     F .text.code	00000008 ___ZN5Print7printlnEPKc_veneer
600027a8 l     F .text.code	00000008 __startup_early_hook_veneer
00000e2c g     F .text.itcm	00000028 EthernetClass::initLinkStatus(void (*)(bool))
0000a45c g     F .text.itcm	0000000c usb_serial_available
20050e6c g     O .bss	00000004 focus_channel_section_read
00002df4 g     F .text.itcm	00000014 _fnet_eth_release
000000c8 g     F .text.itcm	00000002 handleTCPReceive(EthernetServer*)
00000c1c  w    F .text.itcm	0000000c IntervalTimer::~IntervalTimer()
20000000  w    O .data	00000020 vtable for EthernetServer
00004fa8 g     F .text.itcm	00000052 _fnet_netif_is_connected
00009500 g     F .text.itcm	00000002 startup_default_late_hook
0000abc4  w    F .text.itcm	000000f0 yield
00003648 g     F .text.itcm	0000000e _fnet_ip4_will_fragment
20050874 g     O .bss	00000004 usb_timer1_callback
00006458 g     F .text.itcm	00000018 _fnet_mutex_lock
600027fc g     O .text.progmem	00000018 usb_string_manufacturer_name_default
60001a6c g     F .text.code	000003bc configure_external_ram
00001a38 g     F .text.itcm	00000048 fnet_service_poll
00006158 g     F .text.itcm	0000003a _fnet_socket_buffer_append_record
00004b08 g     F .text.itcm	0000001c _fnet_heap_init
00005644 g     F .text.itcm	00000084 _fnet_socket_conflict
0000a6ec  w    F .text.itcm	00000002 HardwareSerial::~HardwareSerial()
600028c0 g     O .text.progmem	00000001 _serialEvent7_default
000032fc g     F .text.itcm	0000011c _fnet_icmp4_error
0000a8e0 g     F .text.itcm	00000020 Print::println()
0000252c g     F .text.itcm	00000004 fnet_dhcp_cln_get_state
0000882c g     F .text.itcm	00000050 _fnet_timer_poll
0000ab60  w    F .text.itcm	00000002 serialEvent5()
00000ef4 g     F .text.itcm	00000012 EthernetClass::stopDHCP()
00002e40 g     F .text.itcm	00000098 _fnet_eth_output_ip4
0000bfd0 g     F .text.itcm	00000002 __malloc_unlock
200019a8 g     O .data	00000060 Serial5
00004da4 g     F .text.itcm	00000018 fnet_netif_set_ip4_dns
600026ac g     F .text.code	00000058 analog_init
00002480 g     F .text.itcm	00000034 fnet_dhcp_cln_get_by_netif
0000da50 g     F .text.itcm	0000004a _vdprintf_r
00003794 g     F .text.itcm	00000068 _fnet_ip4_addr_is_broadcast
00004b24 g     F .text.itcm	00000010 _fnet_free
20001660 g     O .data	00000004 F_CPU_ACTUAL
0000ab70  w    F .text.itcm	00000002 usb_serial_class::~usb_serial_class()
00001b08 g     F .text.itcm	0000000c fnet_service_mutex_unlock
0000be68 g     F .text.itcm	000000c6 memmove
000035ac g     F .text.itcm	00000058 _fnet_ip4_init
00004eb4 g     F .text.itcm	000000bc _fnet_netif_init
00000c18 g     F .text.itcm	00000002 EthernetClass::timer_delay(unsigned long)
0000b1c0 g     F .text.itcm	0000007a HardwareSerial::peek()
00005904 g     F .text.itcm	0000007c fnet_socket_listen
0000ec80 g     F .text.itcm	0000004c _Balloc
0000f42c g       .ARM.exidx	00000000 __exidx_end
20050a90 g     O .bss	00000001 EventResponder::runningFromYield
00001adc g     F .text.itcm	00000020 _fnet_service_init
00009538 g     F .text.itcm	0000005c tempmonGetTemp
2000047c g     O .data	00000008 fnet_fec_eth_api
0000a8b4 g     F .text.itcm	0000002c Print::write(unsigned char const*, unsigned int)
0000b850 g     F .text.itcm	0000000c __errno
2000efb4 g     O .bss	00000004 poll_timer
20050824 g     O .bss	00000001 _fnet_is_enabled
60001000 g     O .text.headers	00000020 ImageVectorTable
00004d8c g     F .text.itcm	00000018 fnet_netif_set_ip4_gateway
20050a80 g     O .bss	00000004 EventResponder::firstInterrupt
00009e90 g     F .text.itcm	00000004 usb_transfer_status
0000a724 g     F .text.itcm	0000000c IRQHandler_Serial2
0000b03c g     F .text.itcm	00000090 sm_set_pool
00002ed8 g     F .text.itcm	00000044 _fnet_eth_multicast_leave_ip4
20001698 g     O .data	00000060 Serial1
0000ab8c  w    F .text.itcm	00000008 usb_serial_class::write(unsigned char const*, unsigned int)
00002724 g     F .text.itcm	00000016 _fnet_arp_release
2005328c g     O .bss	00000004 errno
0000f428 g       .text.itcm	00000000 _etext
2000ef38 g       .bss	00000000 _sbss
20050f10 g     O .bss	00000004 fnet_netif_list
0000a6ec  w    F .text.itcm	00000002 HardwareSerial::~HardwareSerial()
000062b4 g     F .text.itcm	00000020 fnet_socket_addr_is_multicast
0000ab64  w    F .text.itcm	00000002 serialEvent6()
0000b0ec g     F .text.itcm	00000026 HardwareSerial::available()
600028c4 g       *ABS*	00000000 _stextload
000003dc g     F .text.itcm	000000e0 loop
0000a7b4 g     F .text.itcm	0000000c IRQHandler_Serial6
00009d48 g     F .text.itcm	00000064 usb_config_rx
00002ca8 g     F .text.itcm	000000b4 _fnet_eth_input
0000ab50  w    F .text.itcm	00000002 serialEvent1()
00003f7c g     F .text.itcm	00000066 _fnet_ip4_getsockopt
0000a820 g     F .text.itcm	00000036 IPAddress::printTo(Print&) const
0000b350 g     F .text.itcm	00000004 HardwareSerial::write(unsigned char)
20002618 g     O NonCacheable	0000c91e fnet_fec0_buf
20050a84 g     O .bss	00000004 EventResponder::lastInterrupt
00008e48 g     F .text.itcm	00000134 memcpy
00004b34 g     F .text.itcm	00000004 _fnet_free_netbuf
00000c0c g     F .text.itcm	0000000c EthernetClass::timer_get_ms()
0000c4e0 g     F .text.itcm	00001570 _svfprintf_r
20050850 g     O .bss	00000004 systick_millis_count
20001638 g     O .data	00000024 fnet_udp_prot_if
00004bb0 g     F .text.itcm	00000004 _fnet_malloc_max_netbuf
0000b4cc g     F .text.itcm	00000000 .hidden __aeabi_uldivmod
000027b8 g     F .text.itcm	0000014c _fnet_arp_input
200508a0 g     O .bss	00000001 usb_configuration
2004f7e8 g     O .bss	00000001 diginet_console_type
00001348 g     F .text.itcm	00000080 fnet_cpu_isr_install
0000afec g     F .text.itcm	00000050 sm_align_pool
60000000 g     O .text.headers	00000200 FlexSPI_NOR_Config
00002554 g     F .text.itcm	00000058 fnet_link_init
0000ab54  w    F .text.itcm	00000002 serialEvent2()
20050f14 g     O .bss	00000004 fnet_netif_default
200004c8 g     O .data	00000006 fnet_eth_null_addr
600027fc  w    O .text.progmem	00000018 usb_string_manufacturer_name
00004b38 g     F .text.itcm	00000010 _fnet_malloc
00001a80 g     F .text.itcm	00000044 fnet_service_register
000000dc g     F .text.itcm	0000007c handleLinkStatus(bool)
0000b8ac g     F .text.itcm	00000010 malloc
00004bc0 g     F .text.itcm	00000028 _fnet_netif_drain
20001308 g     O .data	000000c8 __mprec_tens
60001fa8 g     F .text.code	000000ec usb_init
00000758  w    F .text.itcm	0000002c EthernetClient::~EthernetClient()
000065d4 g     F .text.itcm	00000010 fnet_memset_zero
00005858 g     F .text.itcm	0000005c fnet_socket_close
20050e40 g     O .bss	00000004 __malloc_top_pad
20050f18 g     O .bss	00000004 systick_safe_read
0000370c g     F .text.itcm	00000018 _fnet_ip4_release
00004de0 g     F .text.itcm	00000016 fnet_netif_get_ip4_addr_type
aaaaaaaf g       *ABS*	00000000 _flexram_bank_config
20001404 g     O .data	00000000 .hidden __dso_handle
00004b4c g     F .text.itcm	00000020 _fnet_malloc_zero
0000ebb8 g     F .text.itcm	0000001c _localeconv_r
00005c58 g     F .text.itcm	00000110 fnet_socket_setopt
600028bf g     O .text.progmem	00000001 _serialEvent6_default
0000edfc g     F .text.itcm	00000012 __i2b
20000000 g       .data	00000000 _sdata
60002864 g     O .text.progmem	0000004b usb_config_descriptor_480
0000b4fc g     F .text.itcm	000002e2 .hidden __udivmoddi4
0000c3b4 g     F .text.itcm	00000024 _sbrk_r
00005f7c g     F .text.itcm	000000c8 fnet_socket
000064c0 g     F .text.itcm	00000102 fnet_memcpy
60001400 g     F .text.code	00000278 ResetHandler
00001170 g     F .text.itcm	00000016 object_queue_add
0000a4dc g     F .text.itcm	00000020 usb_serial_getchar
000040bc g     F .text.itcm	0000004c _fnet_isr_handler
20053280 g     O .bss	00000008 usb_cdc_line_coding
00004c68 g     F .text.itcm	00000030 fnet_netif_is_initialized
00001b14 g     F .text.itcm	00000024 _fnet_dhcp_add_option
20050a88 g     O .bss	00000004 EventResponder::lastYield
60001690 g     F .text.code	00000040 __int_power_button()
0000a62c  w    F .text.itcm	0000001c Print::write(char const*)
000062e8 g     F .text.itcm	00000016 fnet_socket_addr_is_unspecified
60001730 g     F .text.code	00000014 arm_reset()
20051000 g     O .bss	00000010 extmem_smalloc_pool
20001614 g     O .data	00000024 fnet_tcp_prot_if
20050e3c g     O .bss	00000004 __malloc_max_sbrked_mem
00003cf4 g     F .text.itcm	00000280 _fnet_ip4_output
00004ad0 g     F .text.itcm	00000036 _fnet_netbuf_queue_del
200004c0 g     O .data	00000006 fnet_eth_broadcast
00006488 g     F .text.itcm	0000001c _fnet_stack_mutex_lock
0000a9c8 g     F .text.itcm	00000174 Print::printFloat(double, unsigned char)
0000429c g     F .text.itcm	00000014 fnet_isr_init
0000080c g     F .text.itcm	000003e8 EthernetServer::tcp_poll(void*)
60021000 g     O .text.csf	00000c00 hab_csf
00005d68 g     F .text.itcm	000001bc fnet_socket_getopt
20280000 g       .text.csf	00000000 _heap_end
00004490 g     F .text.itcm	00000098 _fnet_netbuf_new
0000f424 g       .ARM.exidx	00000000 __exidx_start
70000000 g       .bss.extram	00000000 _extram_end
00004ba4 g     F .text.itcm	0000000c _fnet_malloc_max
00004dd4 g     F .text.itcm	0000000c _fnet_netif_get_default
20050a8c g     O .bss	00000004 EventResponder::firstYield
20001184 g     O .data	00000004 _global_impure_ptr
000047f0 g     F .text.itcm	00000044 _fnet_netbuf_free_chain
000024b4 g     F .text.itcm	00000028 fnet_dhcp_cln_get_options
0000bfd4 g     F .text.itcm	000003de _realloc_r
0000b85c g     F .text.itcm	00000050 __libc_init_array
00004920 g     F .text.itcm	0000015e _fnet_netbuf_cut_center
00004d6c g     F .text.itcm	0000001e fnet_netif_set_ip4_addr
200013d0 g     O .data	00000028 __mprec_bigtens
00004e14 g     F .text.itcm	00000030 _fnet_netif_get_hw_addr
00003604 g     F .text.itcm	00000044 _fnet_ip4_route
0000ab74  w    F .text.itcm	00000004 usb_serial_class::clear()
00009504 g     F .text.itcm	00000030 _sbrk
60011cf0 g       *ABS*	00000000 _sdataload
0000f090 g     F .text.itcm	00000042 __mcmp
60001794 g     F .text.code	000001f4 flexRamInfo()
20050e70 g     O .bss	00000004 channel_strip_master_section_right_read
00003694 g     F .text.itcm	00000034 _fnet_ip4_input
20001664 g     O .data	00000004 __brkval
200509e8 g     O .bss	00000001 usb_cdc_line_rtsdtr
200015ec g     O .data	00000024 fnet_raw_prot_if
60002704 g     F .text.code	00000000 _init
0000a220 g     F .text.itcm	00000002 usb_serial_reset
000041e4 g     F .text.itcm	00000010 fnet_isr_lock
600016d0 g     F .text.code	00000060 set_arm_power_button_callback(void (*)())
20000484 g     O .data	00000038 fnet_fec_api
0000a7fc g     F .text.itcm	0000000c IRQHandler_Serial8
60002818 g     O .text.progmem	0000004b usb_config_descriptor_12
60001744 g     F .text.code	00000050 progInfo()
000043f0 g     F .text.itcm	00000042 _fnet_mempool_free_mem_status
20050e74 g     O .bss	00000004 meter_display_section_read
000056c8 g     F .text.itcm	000000f8 _fnet_socket_lookup
200532c0 g       .bss	00000000 _ebss
200017bc g     O .data	00000060 Serial3
00004108 g     F .text.itcm	00000044 _fnet_isr_vector_init
0000561c g     F .text.itcm	00000028 _fnet_socket_list_del
00004be8 g     F .text.itcm	00000030 _fnet_netif_get_by_sockaddr
000042f8 g     F .text.itcm	0000007c _fnet_mempool_free
00005980 g     F .text.itcm	00000108 fnet_socket_accept
0000b0cc g     F .text.itcm	00000020 HardwareSerial::availableForWrite()
00004c98 g     F .text.itcm	000000d4 _fnet_netif_set_ip4_addr
00008820 g     F .text.itcm	0000000c fnet_timer_get_ms
0000ed60 g     F .text.itcm	00000040 __hi0bits
00001188 g     F .text.itcm	00000024 object_queue_del
60002688 g     F .text.code	00000002 CrashReportClass::clear()
20203060 g       .bss.dma	00000000 _heap_start
00000bf4  w    F .text.itcm	00000010 EthernetClass::link_callback(void*, fnet_bool_t, void*)
0000623c g     F .text.itcm	00000078 _fnet_socket_buffer_read_address
00006618 g     F .text.itcm	00000024 fnet_rand
00005104 g     F .text.itcm	0000003c _fnet_prot_release
2004f1d4 g     O .bss	00000004 EthernetClass::_handleNoDHCP
000058b4 g     F .text.itcm	00000050 fnet_socket_shutdown
00002bf0 g     F .text.itcm	0000002e _fnet_checksum_pseudo_netbuf_start
20001694 g     O .data	00000004 CrashReport
00000002 g       *ABS*	00000000 _itcm_block_count
0000b27c g     F .text.itcm	000000d2 HardwareSerial::write9bit(unsigned long)
00005c44 g     F .text.itcm	00000012 fnet_socket_recv
2000ef54 g     O .bss	0000005c testSocket1
20052000 g     O .bss	00000020 endpoint0_transfer_data
0000ab4c g     F .text.itcm	00000004 operator delete(void*, unsigned int)
0000ad04 g     F .text.itcm	000002b8 pwm_init
00002904 g     F .text.itcm	000000a4 _fnet_arp_send_request
00005060 g     F .text.itcm	00000010 _fnet_netif_signal_ip4_addr_conflict
0000b1a4 g     F .text.itcm	0000001a HardwareSerial::flush()
00002f1c g     F .text.itcm	00000044 _fnet_eth_multicast_join_ip4
60001e28 g     F .text.code	00000064 usb_pll_start
0000ef40 g     F .text.itcm	000000a0 __pow5mult
20000814 g     O .data	0000000c vtable for CrashReportClass
000042b0 g     F .text.itcm	0000003e _fnet_mempool_init
000055d0 g     F .text.itcm	00000014 _fnet_socket_init
000029a8 g     F .text.itcm	0000009c _fnet_arp_resolve
00001928 g     F .text.itcm	00000094 fnet_fec_multicast_join
00003418 g     F .text.itcm	0000004c _fnet_ip_queue_append
00000000  w      *UND*	00000000 __deregister_frame_info
20052020 g     O .bss	00000020 endpoint0_transfer_ack
20053288 g     O .bss	00000004 usb_cdc_line_rtsdtr_millis
00009e44 g     F .text.itcm	00000028 usb_transmit
0000a648  w    F .text.itcm	00000024 Print::println(char const*)
00004ab8 g     F .text.itcm	00000016 _fnet_netbuf_queue_add
000045b4 g     F .text.itcm	00000034 _fnet_netbuf_free
0000a6cc g     F .text.itcm	00000020 systick_isr
00006300 g     F .text.itcm	0000000c fnet_socket_addr_are_equal
0000642c g     F .text.itcm	0000000e fnet_poll
00006340 g     F .text.itcm	000000ec fnet_init
00002fb8 g     F .text.itcm	0000003a _fnet_eth_is_connected
20001c58 g     O .data	00000010 Serial
0000a6f0 g     F .text.itcm	0000000c IRQHandler_Serial1
0000581c g     F .text.itcm	0000003c _fnet_socket_copy
00005070 g     F .text.itcm	00000014 fnet_netif_get_scope_id
20001158 g     O .data	0000002c vtable for HardwareSerial
000036c8 g     F .text.itcm	00000044 _fnet_ip4_drain
0000ab94  w    F .text.itcm	00000006 usb_serial_class::write(unsigned char)
00008e28 g     F .text.itcm	00000020 startup_early_hook
0000a418 g     F .text.itcm	00000044 usb_serial_peekchar
0000a748 g     F .text.itcm	0000000c IRQHandler_Serial3
00000754  w    F .text.itcm	00000004 EthernetClient::peek()
0000ebe0 g     F .text.itcm	00000000 memchr
00005140 g     F .text.itcm	00000044 _fnet_prot_find
00008f7c g     F .text.itcm	000002c4 set_arm_clock
20050848 g     O .bss	00000004 systick_cycle_count
2000167c g     O .data	00000016 usb_string_serial_number_default
0000e9e8 g     F .text.itcm	000001d0 _free_r
00004e44 g     F .text.itcm	00000020 fnet_netif_get_hw_addr
20050e78 g     O .bss	00000006 diginet_rx_address
0000133c g     F .text.itcm	0000000c fnet_cpu_isr
0000ab84  w    F .text.itcm	00000004 usb_serial_class::flush()
00002394 g     F .text.itcm	000000dc fnet_dhcp_cln_init
2004f1bc g     O .bss	00000004 ServiceLooped
20001408 g     O .data	00000008 EthernetClass::_fnet_poll
00000c04 g     F .text.itcm	00000004 EthernetClass::teensy_mutex_init(void**)
0000a790 g     F .text.itcm	0000000c IRQHandler_Serial5
20002614 g     O .data	00000004 __malloc_sbrk_base
0000ab7c  w    F .text.itcm	00000004 usb_serial_class::read()
0000469c g     F .text.itcm	00000154 _fnet_netbuf_copy
00004434 g     F .text.itcm	0000005a _fnet_mempool_malloc_max
00006318 g     F .text.itcm	00000026 _fnet_socket_addr_route
0000efe0 g     F .text.itcm	000000ae __lshift
00009e14 g     F .text.itcm	0000002e usb_prepare_transfer
00009370 g     F .text.itcm	00000190 unused_interrupt_vector
0000f2a4 g     F .text.itcm	00000100 __ssprint_r
20050868 g     O .bss	00000004 usb_timer0_callback
60001e8c g     F .text.code	0000011c tempmon_init
20050e80 g     O .bss	00000006 diginet_host_address
0000ab5c  w    F .text.itcm	00000002 serialEvent4()
0000f3a4 g     F .text.itcm	0000005e _vasnprintf_r
0000b4bc  w    F .text.itcm	00000002 serialEvent()
2000110c g     O .data	0000000c vtable for IPAddress
000055fc g     F .text.itcm	00000020 _fnet_socket_list_add
0000dafc g     F .text.itcm	000000a4 __register_exitproc
00002c20 g     F .text.itcm	0000002e _fnet_checksum_pseudo_netbuf_end
000007d8  w    F .text.itcm	00000034 EthernetClient::~EthernetClient()
00003724 g     F .text.itcm	0000005c _fnet_ip4_multicast_join
0000a468 g     F .text.itcm	00000074 usb_serial_flush_input
00000750  w    F .text.itcm	00000004 EthernetClient::read()
600028bd g     O .text.progmem	00000001 _serialEvent4_default
0000ee10 g     F .text.itcm	00000130 __multiply
0000a4fc g     F .text.itcm	0000002c usb_serial_putchar
00000025 g       *ABS*	00000000 _teensy_model_identifier
0000a6fc  w    F .text.itcm	0000000e HardwareSerial::~HardwareSerial()
20050e44 g     O .bss	00000028 __malloc_current_mallinfo
0000f1e8 g     F .text.itcm	000000ba __d2b
200004bc g     O .data	00000004 fnet_dhcp_magic_cookie
20050e14 g     O .bss	00000020 HardwareSerial::s_serials_with_serial_events
00000758  w    F .text.itcm	0000002c EthernetClient::~EthernetClient()
2004f1cc g     O .bss	00000008 DNSClient::nullAddress
000096dc g     F .text.itcm	0000066c usb_isr
0000b844 g     F .text.itcm	0000000c __cxa_atexit
00002bd0 g     F .text.itcm	0000001e _fnet_checksum_netbuf
00004df8 g     F .text.itcm	0000001a fnet_netif_set_ip4_addr_type
00006470 g     F .text.itcm	00000018 _fnet_mutex_unlock
600028bc g     O .text.progmem	00000001 _serialEvent3_default
20001128  w    O .data	00000030 vtable for usb_serial_class
00004548 g     F .text.itcm	0000006a _fnet_netbuf_to_buf
20001a6c g     O .data	00000060 Serial6
20050e88 g     O .bss	00000004 surround_panner_section_read
00002a60 g     F .text.itcm	0000002a _fnet_arp_drain
00002f8c g     F .text.itcm	0000002a _fnet_eth_phy_write
2005084c g     O .bss	00000004 scale_cpu_cycles_to_microseconds
000000cc  w    F .text.itcm	0000000e EthernetServer::~EthernetServer()
0000b7e0  w    F .text.itcm	00000002 .hidden __aeabi_ldiv0
0000ab6c  w    F .text.itcm	00000002 serialEvent8()
00005f24 g     F .text.itcm	00000026 _fnet_socket_buffer_release
600028ba g     O .text.progmem	00000001 _serialEvent1_default
20001588 g     O .data	00000034 fnet_fec0_if
20002208 g     O .data	00000408 __malloc_av_
0000a58c g     F .text.itcm	000000a0 usb_serial_flush_output
60001678 g     F .text.code	00000018 arm_power_down()
0000bfcc g     F .text.itcm	00000002 __malloc_lock
00004a80 g     F .text.itcm	00000038 _fnet_netbuf_concat
20051400 g     O .bss	000002c0 _VectorsRam
00005b58 g     F .text.itcm	00000012 fnet_socket_send
000050a8 g     F .text.itcm	0000005c _fnet_prot_init
0000b7e4 g     F .text.itcm	0000005e _calloc_r
00005034 g     F .text.itcm	0000002c _fnet_netif_release_all
00004528 g     F .text.itcm	00000020 _fnet_netbuf_from_buf
00002c9c g     F .text.itcm	0000000c fnet_error_set
20001c68 g     O .data	00000001 yield_active_check_flags
20050878 g     O .bss	00000001 usb_high_speed
00000084  w    F .text.itcm	00000002 EthernetServer::~EthernetServer()
000057c0 g     F .text.itcm	0000005c _fnet_socket_get_uniqueport
0000bf30 g     F .text.itcm	0000009a memset
00002e0c g     F .text.itcm	00000032 _fnet_eth_change_addr_notify
0000ab3c g     F .text.itcm	00000010 main
20050e98 g     O .bss	00000078 fnet_ip4_multicast_list
0000183c g     F .text.itcm	000000ec fnet_fec_output
20050e38 g     O .bss	00000004 __malloc_max_total_mem
00000088  w    F .text.itcm	0000003e EthernetServer::write(unsigned char)
00002dd0 g     F .text.itcm	00000024 _fnet_eth_init
00002e08 g     F .text.itcm	00000004 _fnet_eth_drain
20200000 g     O .bss.dma	0000004b usb_descriptor_buffer
2004f1c0 g     O .bss	00000004 EthernetLooped
00009e94 g     F .text.itcm	00000058 usb_init_serialnumber
600027e4 g       .text.code	00000000 __init_array_end
0000dcc8 g     F .text.itcm	00000c84 _dtoa_r
0000b8cc g     F .text.itcm	00000570 _malloc_r
20050e34 g     O .bss	00000001 HardwareSerial::s_count_serials_with_serial_events
0000dab4 g     F .text.itcm	0000001a __ascii_wctomb
000053cc g     F .text.itcm	00000188 _fnet_raw_input
2000f1b8 g     O .bss	00000004 seconds
20050e8c g     O .bss	00000004 channel_strip_master_section_left_read
2000152c g     O .data	0000005c fnet_cpu_eth0_if
0000930c g     F .text.itcm	00000064 micros
00003658 g     F .text.itcm	0000003a _fnet_ip4_set_socket_addr
000062d4 g     F .text.itcm	00000012 _fnet_socket_addr_is_broadcast
00003fe4 g     F .text.itcm	000000d6 _fnet_ip4_setsockopt
00000ca4 g     F .text.itcm	00000034 EthernetClass::setIP(IPAddress, IPAddress)
0000e94c g     F .text.itcm	0000009c _malloc_trim_r
60002814 g     O .text.progmem	00000004 string0
0000a528 g     F .text.itcm	00000018 usb_serial_write
20050e90 g     O .bss	00000004 timecode_section_read
00004918 g     F .text.itcm	00000008 _fnet_netbuf_trim
00009500  w    F .text.itcm	00000002 startup_late_hook
00008804 g     F .text.itcm	0000001c _fnet_timer_release
0000ab80  w    F .text.itcm	00000004 usb_serial_class::available()
600028c2 g     O .text.progmem	00000001 _serialEvent_default
0000887c g     F .text.itcm	00000012 fnet_timer_poll
20053000 g     O .bss	00000280 endpoint_queue_head
600027e4  w    O .text.progmem	00000016 usb_string_product_name
000061f0 g     F .text.itcm	0000004a _fnet_socket_buffer_read_record
00009240 g     F .text.itcm	000000cc delay
00002470 g     F .text.itcm	0000000e fnet_dhcp_cln_release
0000414c g     F .text.itcm	0000003c fnet_event_init
0000f420 g     F .fini	00000000 _fini
00006044 g     F .text.itcm	00000114 fnet_socket_bind
00003464 g     F .text.itcm	00000034 _fnet_ip_queue_read
60001020 g     O .text.headers	0000000c BootData
00000c28 g     F .text.itcm	00000002 EthernetClass::teensy_mutex_lock(void**)
00005a88 g     F .text.itcm	000000d0 fnet_socket_sendto
0000a910 g     F .text.itcm	0000001e Print::printf(char const*, ...)
0000a9b0 g     F .text.itcm	00000016 Print::print(long)
00009534 g     F .text.itcm	00000004 Panic_Temp_isr
00004f70 g     F .text.itcm	00000020 fnet_netif_init
00008890 g     F .text.itcm	00000040 _fnet_timer_new
00002ff4 g     F .text.itcm	000000fc _fnet_eth_phy_init
0000dad0 g     F .text.itcm	0000002c _write_r
00000d04 g     F .text.itcm	00000128 EthernetClass::init(unsigned char*, unsigned long, unsigned char*)
00002c90 g     F .text.itcm	0000000c fnet_error_get
20002098 g     O .data	00000004 _impure_ptr
00002d5c g     F .text.itcm	00000074 _fnet_eth_output
000024dc g     F .text.itcm	00000020 fnet_dhcp_cln_set_callback_updated
00000c30 g     F .text.itcm	0000002e EthernetClass::setIP(IPAddress, IPAddress, IPAddress, IPAddress)
0000663c g     F .text.itcm	00000010 fnet_srand
0000a858 g     F .text.itcm	0000005c IntervalTimer::end()
00002f60 g     F .text.itcm	0000002a _fnet_eth_phy_read
00006194 g     F .text.itcm	0000005c _fnet_socket_buffer_append_address
600027b0 g       .text.code	00000000 __preinit_array_end
6000211c g     F .text.code	0000056c CrashReportClass::printTo(Print&) const
0000be3c g     F .text.itcm	0000002a __ascii_mbtowc
00000c2c g     F .text.itcm	00000002 EthernetClass::teensy_mutex_release(void**)
0000b354 g     F .text.itcm	00000166 HardwareSerial::IRQHandler()
00000524 g     F .text.itcm	000000a4 setup
200007a8 g     O .data	0000006c usb_descriptor_list
2004f1de g     O .bss	00000001 EthernetClass::dhcp_retransmission_count
0000ab70  w    F .text.itcm	00000002 usb_serial_class::~usb_serial_class()
00000080  w    F .text.itcm	00000002 Print::flush()
000088d0 g     F .text.itcm	0000002c _fnet_timer_free
000011b4 g     F .text.itcm	00000004 fnet_htonl
00004b6c g     F .text.itcm	0000001c fnet_free_mem_status
00004248 g     F .text.itcm	00000054 fnet_event_raise
00004e64 g     F .text.itcm	0000004e _fnet_netif_set_hw_addr
20070000 g       .text.csf	00000000 _estack
0000a540 g     F .text.itcm	0000004c usb_serial_write_buffer_free
2000efb0 g     O .bss	00000004 loopCounter
000005e8 g     F .text.itcm	00000124 EthernetClient::tcp_client_poll(EthernetClient*)
0000ab68  w    F .text.itcm	00000002 serialEvent7()
00000784  w    F .text.itcm	00000052 EthernetClient::write(unsigned char const*, unsigned int)
600028c1 g     O .text.progmem	00000001 _serialEvent8_default
000011ac g     F .text.itcm	00000006 fnet_htons
0000a224 g     F .text.itcm	00000108 usb_serial_configure
0000a900  w    F .text.itcm	0000000e _write
20002618 g       .data	00000000 _edata
000055e4 g     F .text.itcm	00000018 _fnet_socket_set_error
0000630c g     F .text.itcm	0000000a _fnet_socket_addr_copy
2004f1e0 g     O .bss	00000004 EthernetClass::_handleLinkStatus
20001bf4 g     O .data	00000060 Serial8
20050854 g     O .bss	00000001 external_psram_size
00004c18 g     F .text.itcm	00000050 _fnet_netif_release
00004ffc g     F .text.itcm	00000018 fnet_netif_is_connected
00000158  w    F .text.itcm	00000052 EthernetServer::write(unsigned char const*, unsigned int)
0000ab88  w    F .text.itcm	00000004 usb_serial_class::availableForWrite()
0000b23c g     F .text.itcm	00000040 nvic_execution_priority()
000064a4 g     F .text.itcm	0000001c _fnet_stack_mutex_unlock
0000acb4 g     F .text.itcm	0000004e ultoa
00002778 g     F .text.itcm	00000040 fnet_arp_get_mac
00002c50 g     F .text.itcm	00000040 _fnet_diginet_input
000026c4 g     F .text.itcm	00000060 _fnet_arp_init
0000a76c g     F .text.itcm	0000000c IRQHandler_Serial4
0000643c g     F .text.itcm	0000001c _fnet_mutex_init
000065e4 g     F .text.itcm	00000032 fnet_memcmp
00001ac4 g     F .text.itcm	00000018 fnet_service_unregister
0000a684 g     F .text.itcm	00000044 EventResponder::runFromInterrupt()
20002610 g     O .data	00000004 __malloc_trim_threshold
0000ab78  w    F .text.itcm	00000004 usb_serial_class::peek()
000002d8 g     F .text.itcm	00000104 handleDHCPConnected()
000041f4 g     F .text.itcm	00000054 fnet_isr_unlock
00005014 g     F .text.itcm	00000020 fnet_netif_set_callback_on_ip4_addr_conflict
0000f0d4 g     F .text.itcm	00000114 __mdiff
00003498 g     F .text.itcm	00000040 _fnet_ip_setsockopt
2004f1f4 g     O .bss	00000004 EthernetClass::_handleDHCPConnected
0000b114 g     F .text.itcm	00000090 HardwareSerial::read()
00000c60 g     F .text.itcm	00000044 EthernetClass::setIP(IPAddress, IPAddress, IPAddress)
00005084 g     F .text.itcm	00000024 _fnet_netif_get_by_scope_id
00000e54 g     F .text.itcm	000000a0 EthernetClass::startDHCP(void (*)(), void (*)(), unsigned long, unsigned char)
00000710  w    F .text.itcm	0000003e EthernetClient::write(unsigned char)
0000a66c  w    F .text.itcm	00000018 Print::println(unsigned long, int)
00004f90 g     F .text.itcm	0000000c _fnet_netif_join_ip4_multicast
600028bb g     O .text.progmem	00000001 _serialEvent2_default
00004374 g     F .text.itcm	0000007c _fnet_mempool_malloc
200018e4 g     O .data	00000060 Serial4
200011f0 g     O .data	00000101 _ctype_
00005184 g     F .text.itcm	00000038 _fnet_prot_drain
000065c4 g     F .text.itcm	0000000e fnet_memset
00000cd8 g     F .text.itcm	0000002c EthernetClass::setIP(IPAddress)
00000c08 g     F .text.itcm	00000002 EthernetClass::teensy_mutex_unlock(void**)
600027b0 g       .text.code	00000000 __init_array_start
0000b7e0  w    F .text.itcm	00000002 .hidden __aeabi_idiv0
6000268c g     F .text.code	00000020 CrashReportClass::operator bool()
2000165c g     O .data	00000004 F_BUS_ACTUAL
00002a44 g     F .text.itcm	0000001a fnet_arp_send_request
0000ab9c  w    F .text.itcm	0000000e usb_serial_class::~usb_serial_class()
000042f0 g     F .text.itcm	00000006 _fnet_mempool_release
000024fc g     F .text.itcm	00000020 fnet_dhcp_cln_set_callback_discover
00000000 g       .text.itcm	00000000 _stext
000019bc g     F .text.itcm	0000007c fnet_fec_multicast_leave
20001c54 g     O .data	00000004 IntervalTimer::nvic_priorites
0000c400 g     F .text.itcm	000000dc strlen
00001afc g     F .text.itcm	0000000c fnet_service_mutex_lock
20001b30 g     O .data	00000060 Serial7
00004834 g     F .text.itcm	000000e4 _fnet_netbuf_pullup
000087e8 g     F .text.itcm	0000001c _fnet_timer_init
2000017c  w    O .data	0000002c vtable for EthernetClient
00005b6c g     F .text.itcm	000000d8 fnet_socket_recvfrom
00004dbc g     F .text.itcm	00000018 fnet_netif_get_default
00000c1c  w    F .text.itcm	0000000c IntervalTimer::~IntervalTimer()
600027e4 g     O .text.progmem	00000016 usb_string_product_name_default
0000da9c g     F .text.itcm	00000018 vdprintf
000001ac g     F .text.itcm	0000012c handleNoDHCP()
00000084  w    F .text.itcm	00000002 EthernetServer::~EthernetServer()
200015c4 g     O .data	00000024 fnet_icmp4_prot_if
60001988 g     F .text.code	000000e4 configure_cache
0000251c g     F .text.itcm	00000010 fnet_dhcp_cln_set_response_timeout
0000273c g     F .text.itcm	0000003c _fnet_arp_lookup
2005083c g     O .bss	00000004 _fnet_timer_api
00003f74 g     F .text.itcm	00000006 _fnet_ip4_maximum_packet
00004bb4 g     F .text.itcm	0000000c _fnet_mem_release
00000000  w      *UND*	00000000 _Jv_RegisterClasses
600027b0 g       .text.code	00000000 __preinit_array_start
00009e6c g     F .text.itcm	00000024 usb_receive
00003780 g     F .text.itcm	00000012 _fnet_ip4_multicast_leave_entry
20050e94 g     O .bss	00000004 soft_keys_section_read
0000eda0 g     F .text.itcm	0000005a __lo0bits
00004188 g     F .text.itcm	0000005c fnet_isr_unregister
000152dc g       *ABS*	00000000 _flashimagelen
00004b48 g     F .text.itcm	00000004 _fnet_malloc_netbuf
600028be g     O .text.progmem	00000001 _serialEvent5_default
0000ab58  w    F .text.itcm	00000002 serialEvent3()
0000b4c0 g     F .text.itcm	0000000a __aeabi_atexit
00004b88 g     F .text.itcm	0000001c fnet_malloc_max
00000000  w      *UND*	00000000 __register_frame_info
0000afbc g     F .text.itcm	00000030 rtc_get
0000070c  w    F .text.itcm	00000004 EthernetClient::available()
70000000 g       .bss.extram	00000000 _extram_start
0000a6c8 g     F .text.itcm	00000004 pendablesrvreq_isr
0000007c  w    F .text.itcm	00000004 Print::availableForWrite()
2000209c g     O .data	0000016c __global_locale
000034d8 g     F .text.itcm	0000003a _fnet_ip_getsockopt
00005f4c g     F .text.itcm	00000030 _fnet_socket_release
0000a7d8 g     F .text.itcm	0000000c IRQHandler_Serial7
0000a32c g     F .text.itcm	000000ec usb_serial_read
0000a930 g     F .text.itcm	0000007e Print::printNumber(unsigned long, unsigned char, unsigned char)
00004f9c g     F .text.itcm	0000000c _fnet_netif_leave_ip4_multicast
00009dac g     F .text.itcm	00000068 usb_config_tx
00000f08 g     F .text.itcm	00000250 EthernetClass::dhcp_cln_callback_updated(void*, void*, void*)
0000b8bc g     F .text.itcm	00000010 free
0000ece0 g     F .text.itcm	00000080 __multadd
0000eccc g     F .text.itcm	00000012 _Bfree
2000175c g     O .data	00000060 Serial2
2000167c  w    O .data	00000016 usb_string_serial_number
 
It's a variable in this function here
Code:
000005e8 g     F .text.itcm	00000124 EthernetClient::tcp_client_poll(EthernetClient*)

void EthernetClient::tcp_client_poll(EthernetClient *client){
  if(client == NULL) return;

  EthernetClient* tcp_ptr = client;
 
It should be valid, it's at least valid thousands of times besides the one that causes the crash.
 
I think you might've been right, it hasn't crashed yet after more than 100,000 successful connections, this has been giving me a headache all day and it's about the only thing I haven't tried to do to fix this. I'll do more testing tomorrow though it does appear to be solved so far, I'll have to remember to try turning interrupts off and on next time I run into random issues like this. Outside of benchmarking I don't expect to see a Teensy server ever serve that many clients in such a short time so I'm happy to be past this issue and continue scratching my head over other problems.
 
The compiler can sometimes help. See my comments here:

https://forum.pjrc.com/threads/67377-Firmware-quality

If it's a rare but random problem, I wouldn't ignore the issue.

Be careful with disabling interrupts - various code relies on them. And lots of teensy code turns them back on.

In #7, I see use of "new" without checking that it succeeded.
 
Last edited:
I wrapped the function in noInterrupts()/interrupts() so it’s not completely disabled, I at least know not to do that.

There is no check on the new since it will never fail there, it’s a placement new operator so it’s using preallocated memory. You’ll notice right above it that that is where the memory is allocated and checked for validity, right now I have it that if it fails it’ll just lock up so I can definitively see it.
Code:
              uint8_t* new_client_memory = (uint8_t*) _fnet_malloc_netbuf(sizeof(EthernetClient));
              if(!new_client_memory){
                while(1){
                  Serial.println("Failed to allocate client!");
                  delay(1000);
                }
              }
              EthernetClient* new_client = new (new_client_memory) EthernetClient(accepted_socket);
 
Status
Not open for further replies.
Back
Top